有序陣列原地消重升級版
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;
}
};