---
# System prepended metadata

title: 'LeetCode #80 [Remove Duplicates from Sorted Array II](https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii)'
tags: [LeetCode, Medium]

---

###### tags: `LeetCode` `Medium`
# LeetCode #80 [Remove Duplicates from Sorted Array II](https://leetcode.com/problems/remove-duplicates-from-sorted-array-ii)
### (Medium)
給你一個有序數組 nums ，請你 原地 刪除重複出現的元素，使每個元素 最多出現兩次 ，返回刪除後數組的新長度。
不要使用額外的數組空間，你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成


---
與#26類似, 只是允許重複的次數從0變1, 因此需再新增一變數cd(count_duplicate)計算重複次數, count計算總共存取值的個數, tmp計算現在的nums[i]的值。

每次需考慮nums[i]是否等於tmp, 若否, 則更新tmp=nums[i], 並重置cd=0, 再存值nums[count++]=nums[i]。而若nums[i]=tmp但是cd=0, 此時更新cd=1, 並存入nums[count++]=nums[i]。而若nums[i]=tmp&&cd=1, 則此時nums[i]為重複值, 不做任何處理(drop掉)。


---
```
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int cnt=0;
        int cnt1=0;// 0 or 1
        int tmp;
        for(int i=0;i<nums.size();i++){
            if(nums[i]!=tmp){
                tmp = nums[i];
                cnt1=0;
                nums[cnt++]=nums[i];
            }
            else if(nums[i]==tmp&&cnt1==0){
                cnt1=1;
                nums[cnt++]=nums[i];
            }
        }
        return cnt;
    }
};
```