目录
  1. 1. 双指针法
  2. 2. 最后贴上LeetCode解法
删除排序数组中的重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不需要考虑超出新长度后面的元素。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

  • 如果题目没要求O(1),可以直接用LinkedHashSet解决。
  • 即使不能有空间要求,这道题也比较简单。这是我第一次速度超过100%,哈哈哈哈哈

双指针法

由于我的答案和LeetCode思路一样,所以我叫他双指针法。

  • 首先判断数组是不是空或者是不是长度为1,是的话直接返回数组长度
  • 声明两个变量即 双指针 ,一个快指针i,一个慢指针ans
  • 快指针声明在for循环里,每次循环都 i++
  • 慢指针声明在循环外,当 nums[i] != nums[i+1]时(即不重复时),令nums[ans] = nums[i],ans++
  • 最后返回ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int removeDuplicates(int[] nums) {

if(nums==null || nums.length == 1){
return nums.length;
}

int ans = 0;
for(int i = 0; i < nums.length; i++){
if(i == nums.length-1 || nums[i] != nums[i+1]){
nums[ans] = nums[i];
ans++;
}
}
return ans;
}

最后贴上LeetCode解法

思路基本一致

1
2
3
4
5
6
7
8
9
10
11
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;
}
文章作者: EasonZzZz
文章链接: http://yoursite.com/2019/10/22/算法之旅/LeetCode/删除排序数组中的重复项/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Nice To Meet U