給定一個排序數組,你需要在原地删除重複出現的元素,使得每個元素最多出現兩次,傳回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 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%的使用者