1. 程式人生 > >[leetcode] 80. Remove Duplicates from Sorted Array II (Medium)

[leetcode] 80. Remove Duplicates from Sorted Array II (Medium)

排序陣列去重題,保留重複兩個次數以內的元素,不申請新的空間。

解法一:

因為已經排好序,所以出現重複的話只能是連續著,所以利用個變數儲存出現次數,藉此判斷。

Runtime: 20 ms, faster than 19.12% of C++ online submissions for Remove Duplicates from Sorted Array II.

class Solution
{
public:
  int removeDuplicates(vector<int> &nums)
  {
    if (nums.size() == 0)
      return 0;
    int i = 1;
    int lastNum = nums[0];
    int times = 1;
    while (i < nums.size())
    {
      if (nums[i] == nums[i - 1])
      {
        ++times;
        if (times > 2)
        {
          nums.erase(nums.begin() + i);
          continue;
        }
      }
      else
      {
        times = 1;
        lastNum = nums[i];
      }
      i++;
    }
    return nums.size();
  }
};

 

解法二:

討論區看到Stefan Pochmann大神的解法,他的解法一如既往的讓人眼前一亮,膜拜啦。

Runtime: 8 ms, faster than 100.00% of C++ online submissions for Remove Duplicates from Sorted Array II.

class Solution
{
public:
  int removeDuplicates(vector<int> &nums)
  {
    int i = 0;
    for (int n : nums)
      
if (i < 2 || n > nums[i - 2]) nums[i++] = n; return i; } };