Go语言有序数组去重代码中,此处为什么不能使用if替代for?
为什么不能用if替代这里的for
两者的执行逻辑有本质区别:
for j < len(nums)是循环控制逻辑:只要j小于数组长度,就会重复执行大括号内的代码,直到j自增到超出数组下标范围才终止,刚好满足「遍历整个数组做去重」的需求。- 要是换成
if j < len(nums),它只会执行一次大括号内的逻辑,执行完就直接跳到return i的步骤了,根本不会遍历完整的数组,结果肯定不符合预期。
你可以用自己写的测试用例nums := []int{1,2,2,3,5,5}验证下:
如果换成if,执行完第一次判断后j只会涨到1,函数就直接返回i=1了;而原来的for循环会一直让j从0遍历到6,覆盖所有数组元素,最终返回正确的去重后长度4。
你当前写的双指针逻辑本身是对的,是有序数组去重的最优解法,时间复杂度O(n)、空间复杂度O(1),只要保留for循环就能正常运行。
内容的提问来源于stack exchange,提问作者xinlan yao
相关产品推荐
相关产品推荐

