Medium
Related Topics: Array / Two Pointers
LeetCode Source
這題跟昨天類似,但可重複的數字從 1 個變成 2 個,且強調必須在 in-place 的規範下解題
我這裡先初始兩個變數
check
: 計算數字出現次數index
: 紀錄 index 位置,換數字時和最後回傳我們需要用到它由於題目初始條件 nums
長度最小是一,所以我們從 index = 1
開始判斷
當此時的數字與前一個數字相同時,check += 1
反之,check = 1
,代表沒有出現相同數字,重制變數
最後面判斷式是重點,假設我們 check > 2
,代表說有出現重複數字兩次以上check <= 2
時,我們必須替換數字index
的位置便是關鍵,index
初始下是在 1,僅在 check <= 2
時加一
我們可以發現,如果重複出現超過兩次,剩餘的數字便會忽略
而如果只出現一次或兩次,則會觸發判斷式,將重複出現的數字替換成只出現一到兩次的數字
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
index = 1
count = 1
for i in range(1, len(nums)):
if nums[i] == nums[i - 1]:
count += 1
else:
count = 1 # Reset the count for the new element
if count <= 2:
nums[index] = nums[i]
index += 1
return index
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int index = 1, check = 1;
for (int i = 1; i < nums.size(); i++) {
if (nums[i] == nums[i-1]) {
check += 1;
} else {
check = 1;
}
if (check <= 2) {
nums[index] = nums[i];
index += 1;
}
}
return index;
}
};