原题链接
难易程度
简单
题目要求
1. 给出的数组为升序
2. 应返回删除重复元素后,不重复那部分的长度
3. 应原地删除数组元素,并保证删除之后的数组元素的相对位置和以前一样
4. 使用 O(1) 额外空间的条件下完成
5. 返回删除后数组剩余元素的数量
分析
本题可以直接使用双指针解法解答。
给定2个指针 cur, next = cur + 1,然后 next 指针从当前位置开始不断向后遍历数组元素,并判断当前元素的值是否不等于 cur 处的值即可。
如果找到满足条件的数组元素,则直接将 cur + 1 位置处的元素值替换为 next 处的值即可。
注意:next 要小于数组的长度!
代码
1 public int removeDuplicates(int[] nums) { 2 if (nums == null || nums.length == 0) { 3 return 0; 4 } 5 if (nums.length == 1) { 6 return 1; 7 } 8 9 int len = nums.length; 10 int cur = 0; 11 int next = cur + 1; 12 while (next < len) { 13 if (nums[cur] != nums[next]) { 14 nums[++cur] = nums[next]; 15 } 16 next++; 17 } 18 return cur + 1; 19 }
执行结果
耗时:0ms
内存消耗:43MB