不使用便捷函数 用伪代码实现数组去重复制并将0值后置
缺失的核心逻辑点
- B数组未使用独立写入指针:你当前直接复用原数组的下标
i给B数组赋值,遇到重复元素跳过赋值时,B数组对应的i位置会保留初始的0值,导致非0的有效元素中间插入0,无法连续排列在数组头部。 - 边界判断缺失:遍历从
i=0开始时,i-1会访问到数组最后一位,虽然当前测试用例未触发异常,但逻辑本身存在漏洞,会对首元素判断造成干扰。
符合要求的实现(无内置便捷函数调用)
伪代码
// 输入:已按自然顺序排序的原数组A,长度为length // 输出:去重完成、0值后置的目标数组B,长度为length 初始化B数组,长度等于A的长度,所有元素默认赋值为0 初始化B数组的写入位置指针 pos = 0 循环变量i从0遍历到length-1: 如果i == 0: B[pos] = A[i] pos = pos + 1 否则如果A[i] != A[i-1]: B[pos] = A[i] pos = pos + 1 结束循环 // B数组pos之后的位置已经是初始值0,无需额外处理 返回B数组
修正后的Python验证代码
A = [1, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9] arr_length = len(A) B = [0 for _ in range(arr_length)] write_pos = 0 for i in range(arr_length): if i == 0: B[write_pos] = A[i] write_pos += 1 elif A[i] != A[i-1]: B[write_pos] = A[i] write_pos += 1 print(B)
运行输出:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0]
内容的提问来源于stack exchange,提问作者sokoviaaccords
相关产品推荐
相关产品推荐

