Follow up for "Remove Duplicates":
What if duplicates are allowed at most twice?
For example,
Given sorted array nums = [1,1,1,2,2,3],
Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn't matter what you leave beyond the new length.
題意:有一個已經(jīng)排序好的數(shù)組回右,如果數(shù)組中每個元素最多允許出現(xiàn)兩次,按條件更新數(shù)組漱挚,并返回更新后的數(shù)組有效長度翔烁。
思考:這是一道followup題目,由于最多允許出現(xiàn)兩次旨涝,所以可以增加一個計數(shù)器來檢測目前是否重復(fù)次數(shù)是否已達(dá)到兩次蹬屹。用一個指針prePtr記錄目前更新到的位置,一個游標(biāo)指針來遍歷數(shù)組白华。如果游標(biāo)和游標(biāo)前面的值不相等慨默,右移prePtr并更新值;如果相等弧腥,并且重復(fù)的次數(shù)小于2厦取,則prePtr還是可以右移并更新值的,如果次數(shù)已經(jīng)大于等于2管搪,需要等待下一個不同的值才能右移prePtr虾攻。
public int removeDuplicates(int[] nums) {
if (nums == null || nums.length == 0) {
return 0;
}
int prePtr = 0;
int cnt = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[i-1]) {
nums[++prePtr] = nums[i];
cnt = 1;
} else {
if (cnt < 2) {
nums[++prePtr] = nums[i];
}
}
}
return prePtr + 1;
}
bug:自己做的時候比較的是游標(biāo)和prePtr處的值是否相等,并且用一個布爾標(biāo)志而不是計數(shù)器更鲁,在[1,1,1,1,3,3]這個case下就無法通過霎箍。因為和自己之前的元素進行比較才知道是不是連續(xù)重復(fù)。