删除有序数组中的重复项-7.17

30 阅读1分钟

示例 1:

输入: nums = [1,1,2]
输出: 2, nums = [1,2,_]
解释: 函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

示例 2:

输入: nums = [0,0,1,1,1,2,2,3,3,4]
输出: 5, nums = [0,1,2,3,4]
解释: 函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

引用大佬的思路:leetcode.cn/problems/re…

核心思路:

  • 跟删除数组中的制定元素思路差不多,将符合规则的数据依次从数组头部开始放
  • 因为是有序数组,只需要双指针从头依次遍历、比较、移动指针、赋值即可

实现

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length == 1){
            return 1;
        }

         int cnt = 1;
         int i = 0; // 慢指针
         for(int j =1; j<nums.length ;j++)  {

            // 如果慢指针的值 != 快指针的值,将快指针的值放到慢指针的下一个位置
            if(nums[j] != nums[i]){
                cnt++;
                nums[++i] = nums[j];
            }
         } 

         return cnt;
    }
}