LeetCode删除有序数组重复项运行后尾部重复值变化原因咨询
问题解答
核心原因
你对数组尾部元素的预期没有逻辑支撑,你的代码从未修改过返回长度之外的数组位置,尾部元素会保留原始数组的对应值。
代码执行流程复盘
输入原始数组为 [1,1,1,3,5,5,7],方法执行过程如下:
- 初始状态:数组长度
n=7,结果指针result=0 - 遍历下标
i=0:判定与下一位值相等,跳过,不修改数组 - 遍历下标
i=1:判定与下一位值相等,跳过,不修改数组 - 遍历下标
i=2:判定与下一位值不等,执行nums[0] = 1,result变为1 - 遍历下标
i=3:判定与下一位值不等,执行nums[1] = 3,result变为2 - 遍历下标
i=4:判定与下一位值相等,跳过,不修改数组 - 遍历下标
i=5:判定与下一位值不等,执行nums[2] = 5,result变为3 - 遍历下标
i=6:无下一位元素,直接执行nums[3] =7,result变为4
整个过程你仅修改了数组下标0、1、2、3的位置,下标4、5、6的内容完全没有改动,原始数组这三个位置的值就是5、5、7,因此打印完整数组得到的结果就是[1,3,5,7,5,5,7],符合代码逻辑。
补充说明
LeetCode的《Remove Duplicates from Sorted Array》题目本身不要求修改返回长度之外的尾部元素,判题时仅校验返回长度对应的前N位元素是否符合要求,你的解法本身是正确的,无需关注尾部元素的取值。
内容的提问来源于stack exchange,提问作者Zipper_Jnr
相关产品推荐
相关产品推荐

