天天看點

LeetCode 80——删除排序數組中的重複項 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 。

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

class Solution {
 /* 雙指針
	思路:分三種情況,比上一道題多考慮相等的情況。
	      在相等的同時需要判斷相等的數不能超過2次,是以需要附加标簽來判斷
          當flag = true 并且相等時,将R指向的元素指派給L指針指向的元素,同時L++,R++
              此時,将标簽flag = false;
          當array[L] < array[R]時,重新将flag = true,并執行下面的步驟
          最後一種情況:R++; 
	*/
    public int removeDuplicates(int[] array) {
        int L = 0;
        int R = L+1;
        boolean flag = true;
        while(R < array.length){
            if(array[L] < array[R]){
                L++;
                array[L] = array[R];
                R++;
                flag = true;
            }else if(array[L] == array[R] && flag == true){
                L++;
                array[L] = array[R];
                R++;
                flag = false;
            }else
                R++;
        }
        return L+1;
    }
}
           

執行用時 :2 ms, 在所有 Java 送出中擊敗了97.59%的使用者

記憶體消耗 :38.3 MB, 在所有 Java 送出中擊敗了85.44%的使用者

繼續閱讀