天天看點

一天一道LeetCode,沖啊!——80

題目

  1. 删除排序數組中的重複項 II

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

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

示例 1:

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

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

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

示例 2:

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

函數應傳回新長度 length = 7, 并且原數組的前五個元素被修改為 0, 0, 1, 1, 2, 3, 3 。

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

分析

  • 定義一個cur指針,跟随周遊,

    nums[cur++]=nums[i]

  • 如果沒有出現重複兩次的,cur就會與i一直相等
  • 如果出現了,cur就會不變,i++,就相當于删除了重複的元素

代碼

public int removeDuplicates(int[] nums) {
        int length = nums.length;
        if (length <= 2)
            return length;
        int cur = 2;
        for (int i = 2; i < length; i++) {
            if (nums[i] != nums[cur - 2]) {
                nums[cur++] = nums[i];
            }
        }
        return cur;
    }
           

後記

傳送門 ===>>