給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成
示例一:
給定數組 num = [1,1,2],
函數應該返回新的長度2 , 並且原數組num的前兩個元素被修改爲 1,2
示例二:
給定數組 num = [0,0,1,1,1,2,2,3,3,4],
函數應該返回新的長度5, 並且原數組num的前兩個元素被修改爲 0, 1, 2, 3, 4
算法分析:
利用雙指針,數組完成排序後,我們可以放置兩個指針 i 和 j,其中 i 是慢指針,而 j 是快指針。
只要 nums[i] = nums[j],就增加 j 以跳過重複項。
當遇到 nums[j] ≠ nums[i] 時,跳過重複項的運行已經結束,因此必須把它(nums[j])的值複製到 nums[i+1]。
然後遞增 i,接着將再次重複相同的過程,直到 j 到達數組的末尾爲止。
public static int remove(int[] num) {
if(num.length == 0) return 0;
int i = 0;
for(int j = 1 ; j<num.length ; j++){
if(num[j] != num[i]){
i++;
num[i] = num[j];
}
}
return i+1;
}