26. 刪除排序數(shù)組中的重復(fù)項
問題
給定一個排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 額外空間的條件下完成。
示例 1:
給定數(shù)組
,
函數(shù)應(yīng)該返回新的長度, 并且原數(shù)組
的前兩個元素被修改為
。
你不需要考慮數(shù)組中超出新長度后面的元素。
示例 2:
給定
,
函數(shù)應(yīng)該返回新的長度, 并且原數(shù)組
的前五個元素被修改為
。
你不需要考慮數(shù)組中超出新長度后面的元素。
說明:
為什么返回數(shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請注意,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
你可以想象內(nèi)部操作如下:
// nums 是以“引用”方式傳遞的。也就是說,不對實參做任何拷貝int len = removeDuplicates(nums); // 在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。 // 根據(jù)你的函數(shù)返回的長度, 它會打印出數(shù)組中該長度范圍內(nèi)的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); }
解法
快慢指針,慢指針只有在快指針的數(shù)大于慢指針前一個數(shù)時才推進。
代碼
java實現(xiàn)
class Solution {
public int removeDuplicates(int[] nums) {
int index=0;
for(int n:nums) {
if(index<1||n>nums[index-1]) {
nums[index++]=n;
}
}
return index;
}
}