「力扣」80. 刪除排序數組中的重複項 II(第三天)

80. 刪除排序數組中的重複項 II

題目

題目難度:中等

給定一個排序數組,你需要在原地刪除重複出現的元素,
使得每個元素最多出現兩次,返回移除後數組的新長度。

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

示例 1:

給定 nums = [1,1,1,2,2,3],

函數應返回新長度 length = 5, 
並且原數組的前五個元素被修改爲 1, 1, 2, 2, 3 。

你不需要考慮數組中超出新長度後面的元素。

解題

將快指針(當前遍歷的數字)和慢指針指向的數字的前一個數字比較(也就是滿足條件的倒數第 2 個數)。

  • 如果相等,因爲有序,所以倒數第 1 個數字和倒數第 2 個數字都等於當前數字,再添加就超過 2 個了。
  • 如果不相等,那麼就添加。
class Solution {
    public int removeDuplicates(int[] nums) {
        int fast = 2;
        int slow = 1;
        for(; fast < nums.length ;fast++){
            if(nums[slow-1] != nums[fast]){
                nums[++slow] = nums[fast];
            }
        }
        return slow+1;

    }
}

「力扣」189.旋轉數組(第四天)
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章