Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array A = [1,1,1,2,2,3]
,
Your function should return length = 5
, and A is now [1,1,2,2,3]
.
典型的兩指標問題
兩個指標指向初始位置,一個指標i開始遍歷,記錄出現相同數的個數
如果遍歷的指標i等於其前面的指標index且cnt個數超過兩個,則繼續移動遍歷的指標
如果遍歷的指標i等於其前面的指標index且cnt個數恰好為2,則更新index指標
如果遍歷的指標不等於其前面的指標index,則出現相同的數,更新index指標,且清零計數器
#include <iostream> #include <vector> #include <algorithm> using namespace std; int removeDuplicates(int A[], int n){ if(n < 3) return n; int index = 0, cnt = 0; for(int i = 1; i < n; ++ i){ if(A[i] == A[index] && cnt < 2){ A[++index] = A[i]; cnt = 2; }else if(A[i] != A[index]){ A[++index] = A[i]; cnt =0 ; } } return index+1; } int main(){ int A[] = {1,1,1,2,2,3}; cout<<removeDuplicates(A,6)<<endl; }