Featured image of post Remove Duplicates from Sorted Array II

Remove Duplicates from Sorted Array II

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

分析

双指针

  • 指针 i 表示当前处理后数组的有效长度
  • 每次从前往后扫描数组元素 x,如果 xnums[i - 1]nums[i - 2] 不同时(即还没出现两次),就可以保留它
  • 否则跳过该元素

C++代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
class Solution
{
public:
    int removeDuplicates(vector<int>& nums)
    {
      int i = 0; // 写指针,记录当前可以写入的位置
      for (int x : nums) // 遍历每个元素
        if (i < 2 || (nums[i - 1] != x || nums[i - 2] != x))  // 若前面不足两个元素,或当前元素不等于前两个元素 -> 可以保留
          nums[i ++ ] = x; // 将当前元素写入位置 i,并自增 i
      return i; // 返回有效数组长度
    }
};

时间复杂度

每个元素只遍历一次:O(n)

空间复杂度

O(1)

Built with Hugo
Theme Stack designed by Jimmy