Leetcode 80. Remove Duplicates from Sorted Array II

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.

題意:有一個已經排序好的數(shù)組,如果數(shù)組中每個元素最多允許出現(xiàn)兩次,按條件更新數(shù)組,并返回更新后的數(shù)組有效長度。

思考:這是一道followup題目,由于最多允許出現(xiàn)兩次,所以可以增加一個計數(shù)器來檢測目前是否重復次數(shù)是否已達到兩次。用一個指針prePtr記錄目前更新到的位置,一個游標指針來遍歷數(shù)組。如果游標和游標前面的值不相等,右移prePtr并更新值;如果相等,并且重復的次數(shù)小于2,則prePtr還是可以右移并更新值的,如果次數(shù)已經大于等于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:自己做的時候比較的是游標和prePtr處的值是否相等,并且用一個布爾標志而不是計數(shù)器,在[1,1,1,1,3,3]這個case下就無法通過。因為和自己之前的元素進行比較才知道是不是連續(xù)重復。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容