題目
給定一個排序數組,你需要在原地删除重複出現的元素,使得每個元素隻出現一次,傳回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組并在使用 O(1) 額外空間的條件下完成。
思路
1 不需要額外數組,直接修改原數組,是以不能new int[array.length]記錄獨立的數值
2 需要記錄一個索引index來儲存确定好了的不重複的位置
3 num[i++] 這種表示都是先試用後加,意思是初始i = 0 ,執行的第一次是指派給第1個數組位置的值
代碼
1 注釋掉的第一次我寫的,我用了temp來存儲目前不重複的數字的值,然後與周遊到的值比較,并且更新這個值。
大牛寫的時候并沒有用到這個臨時變量,而是直接取到索引位置的那個值。
public int removeDuplicates(int[] nums){
int i = 0;
for(int n : nums){
if(i == 0|| n != nums[i-1]){
nums[i++] = n;
}
}
return i;
/*if(nums.length==0){
return 0;
}
int num = 1;
int temp = nums[0];
for(int i=1;i<nums.length;i++){
if(nums[i]==temp){
}else{
nums[num]=nums[i];
num++;
temp=nums[i];
}
}
return num;*/
}