刪除有序陣列中的重複項 II

柴勇玛喜达發表於2024-09-04

給你一個有序陣列 nums ,請你原地 刪除重複出現的元素,使得出現次數超過兩次的元素只出現兩次 ,返回刪除後陣列的新長度。

不要使用額外的陣列空間,你必須在 原地修改輸入陣列 並在使用 O(1) 額外空間的條件下完成。

示例 1:

輸入:nums = [1,1,1,2,2,3]
輸出:5, nums = [1,1,2,2,3]
解釋:函式應返回新長度 length = 5, 並且原陣列的前五個元素被修改為 1, 1, 2, 2, 3。 不需要考慮陣列中超出新長度後面的元素。

示例 2:

輸入:nums = [0,0,1,1,1,1,2,3,3]
輸出:7, nums = [0,0,1,1,2,3,3]
解釋:函式應返回新長度 length = 7, 並且原陣列的前七個元素被修改為 0, 0, 1, 1, 2, 3, 3。不需要考慮陣列中超出新長度後面的元素。
class Solution {
    public int removeDuplicates(int[] nums) {

        if(nums.length <= 2) {
            return nums.length;
        }

        //slow表示處理完成的陣列長度,fast表示掃描過的陣列長度
        int fast = 2, slow = 2;

        while(fast < nums.length) {
            //最多出現兩次,所以將slow-2處的數與fast處的數進行比較
            if(nums[slow-2] != nums[fast]) {
                nums[slow] = nums[fast];
                slow++;
            }
            fast++;
        }

        return slow;
    }
}

相關文章