原题链接

删除有序数组中的重复项 - 力扣(LeetCode)

 

难易程度

简单

 

题目要求

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