1. 程式人生 > >leetcode:Remove Duplicates from Sorted Array II (允許重複一次,去掉陣列多餘數字)【面試演算法題】

leetcode:Remove Duplicates from Sorted Array II (允許重複一次,去掉陣列多餘數字)【面試演算法題】

題目:

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].

題意每個數只允許重複一次,輸出去重後的陣列和個數,依舊上一題的要求,常數空間也就是隻能在原陣列上操作。

應為允許一個重複,所以判斷就不是相鄰而是相隔一個的數字是否不一樣。

不一樣就需要更新值,但注意到這題更新陣列不能是當前的狀態,而需要是更新前一個不同的數,用temp存當前值以便於下一次賦值。

因為如果更新當前的數,下一次判斷相隔的數是否不同的時候,訪問的就是覆蓋後的陣列值,就不對了。

class Solution {
public:
    int removeDuplicates(int A[], int n) {
        if(n==0)return 0;
        if(n==1)return 1;
        int num=1,i,temp=A[1];
        for(i=2;i<n;++i)
            if(A[i]!=A[i-2])
            {
                A[num++]=temp;
                temp=A[i];
            }
        A[num++]=temp;
        return num;
    }
};
// blog.csdn.net/havenoidea
題解目錄