26. 删除排序数组中的重复项
此题目理解:
removeDuplicates的返回值是不重复的元素构成的数组的长度,如果输入为[0,0,1,1,2,2],返回值应该为3,修改后的数组前三个值应该为[0,1,2],在执行代码的时候,会根据返回值截取nums这个数组,因此只需要保证nums修改正确,且返回的值正确。
参考答案理解
用两个指针,其中i指向每次更新时最后一个不重复的元素,j指向nums元素。最终输出时由于i是下标,因此需要加一来输出长度
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}
作者:LeetCode
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/solution/shan-chu-pai-xu-shu-zu-zhong-de-zhong-fu-xiang-by-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
例子:[0,1,1,2]
开始时i=0,j=1,nums[j] != nums[i]
,因此i=1,nums变为[0,1,1,2]
进入第二个循环 i=1,j=2 nums[j] == nums[i]
,i不变 nums不变
第三个循环 i=1,j=3,nums[j] != nums[i]
因此i=2 nums变为[0,1,2,2]
循环结束,i=2,输出3即只取nums前三个元素[0,1,2]