[leetcode] 80. Remove Duplicates from Sorted Array II (Medium)
阿新 • • 發佈:2018-11-24
排序陣列去重題,保留重複兩個次數以內的元素,不申請新的空間。
解法一:
因為已經排好序,所以出現重複的話只能是連續著,所以利用個變數儲存出現次數,藉此判斷。
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; } };