signed

QiShunwang

“诚信为本、客户至上”

leetcode#80 删除有序数组中的重复项 II

2021/6/24 18:12:20   来源:

leetcode#80 删除有序数组中的重复项 II

题目:

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。

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

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

思路:

1、模拟

2、双指针

因为是有序数组且数量最多两个,所以如果当前遍历pos的元素等于pos-2的元素,那无疑是重复了,所以设两个指针i,j,i赋值用,j遍历用,如果j遍历的元素等于i-2说明元素已经重复两次了,所以不进行赋值,j后移一位,i不动。如果不等于,那就进行赋值,赋值后,i,j都后移一位。

代码:

class Solution
{
public:
    int removeDuplicates(vector<int> &nums)
    {
      int i=2,j=2,sum=2;
      if(nums.size()<=2) return nums.size();
      while(j<nums.size())
      if(nums[i-2]!=nums[j++])
          nums[i]=nums[j-1],i++,sum++;
      return sum;
    }
};