如何实现数组拷贝并完全去重(不可使用SET类内置函数)
实现逻辑
要实现全量非连续去重,核心逻辑是每次往结果数组B中存入元素前,先检查当前元素是否已经在B的已填充有效区域存在,仅当不存在时才执行写入操作。
伪代码实现
// 定义变量 A: 待去重的原始数组,长度为n B: 结果数组,初始长度和A一致,避免写入越界 b_length: 整数,初始值为0,记录B中已存入的有效元素个数 FOR 索引i 从0遍历到A的长度-1: 定义布尔变量is_exist = false,标记当前A[i]是否已存在于B中 // 遍历B的已有有效元素查重 FOR 索引j 从0遍历到b_length-1: IF A[i] == B[j]: is_exist = true BREAK // 找到重复后直接跳出内层循环,减少无效遍历 END FOR // 无重复则写入B IF is_exist == false: B[b_length] = A[i] b_length = b_length + 1 END FOR // 最终B数组的前b_length个元素即为完全去重后的结果
对应Python可运行实现
适配你提供的测试用例,代码如下:
A = [1, 1, 1, 2, 2, 2, 3, 4, 5, 2, 2, 2, 7, 8, 8, 9] # 初始化结果数组,长度和原始数组一致 B = [0 for _ in range(len(A))] # 记录B中有效元素长度 b_length = 0 for i in range(len(A)): is_exist = False # 查重逻辑:检查当前元素是否已经存入B的有效区域 for j in range(b_length): if A[i] == B[j]: is_exist = True break # 无重复则写入 if not is_exist: B[b_length] = A[i] b_length += 1 # 输出去重后的有效部分 print(B[:b_length])
运行输出结果为:[1, 2, 3, 4, 5, 7, 8, 9],符合预期要求。
该实现不依赖任何内置去重、集合类函数,仅通过基础循环和比较逻辑完成,时间复杂度为O(n²),适合数据量不大的场景使用。
内容的提问来源于stack exchange,提问作者acceptallcookies
相关产品推荐
相关产品推荐

