给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不需要考虑超出新长度后面的元素。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
- 如果题目没要求O(1),可以直接用LinkedHashSet解决。
- 即使不能有空间要求,这道题也比较简单。这是我第一次速度超过100%,哈哈哈哈哈
双指针法
由于我的答案和LeetCode思路一样,所以我叫他双指针法。
- 首先判断数组是不是空或者是不是长度为1,是的话直接返回数组长度
- 声明两个变量即 双指针 ,一个快指针i,一个慢指针ans
- 快指针声明在for循环里,每次循环都 i++
- 慢指针声明在循环外,当 nums[i] != nums[i+1]时(即不重复时),令nums[ans] = nums[i],ans++
- 最后返回ans
1 | public int removeDuplicates(int[] nums) { |
最后贴上LeetCode解法
思路基本一致
1 | public int removeDuplicates(int[] nums) { |