Leetcode Remove Duplicates from Sorted Array II

OpenSoucre發表於2014-06-21

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;
}

 

相關文章