[leetcode]remove-duplicates-from-sorted-array-ii

RioDream發表於2019-05-11

有序陣列原地消重升級版


solution 1

類似i問題,只是在檢出新的數字的時候,繼續再往後看一位就可以了

class Solution {
public:
    int removeDuplicates(int A[], int n) {
        int sameCount = 0;
        const int MAX_DUP = 2;//這裡其實不該這麼寫,因為其實是不可擴充套件的。

        int new_len = 0;
        int last = A[0]-1;
        for(int i=0;i<n;i++){
            int temp = A[i];

            if(temp!=last){
                A[new_len++] = temp;
                if(i+1<n&&A[i+1]==temp){ //如果後一位也相同,就也給賦值
                    A[new_len++] = temp;
                }

            }
            last = temp;
        }
        return new_len;
    }
};

solution 2

小改動

class Solution {
public:
    int removeDuplicates(int A[], int n) {
        int sameCount = 0;
        const int MAX_DUP = 2; //這裡其實不該這麼寫,因為其實是不可擴充套件的。

        int new_len = 0;
        int last = A[0]-1;
        for(int i=0;i<n;i++){
            int temp = A[i];

            if(temp!=last){
                A[new_len++] = temp;
                if(i+1<n&&A[i+1]==temp){
                    A[new_len++] = temp;
                    i++; //here! 由於下一步的temp一定也是等於last的,所以直接跳過。
                }

            }
            last = temp;
        }
        return new_len;
    }
};