題目:給定一個排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素恳啥,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度斤程。不要使用額外的數(shù)組空間角寸,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成菩混。
示例 2: 給定 nums =[0,0,1,1,1,2,2,3,3,4],函數(shù)應(yīng)該返回新的長度5, 并且原數(shù)組nums 的前五個元素被修改為0,1,2,3,4**。你不需要考慮數(shù)組中超出新長度后面的元素扁藕。
解題思路分析:
因為不能使用額外數(shù)組空間沮峡,所以不能按將出現(xiàn)的元素復(fù)制到新的數(shù)組的思路來做。既然這樣亿柑,設(shè)置兩個指針i, j, 從開頭0邢疙,1兩個位置起,判斷 nums[i]與nums[j]的值是否相等望薄,如果不等疟游,就將i,j指針往后移動一位。如果相等痕支,就只移動j指針颁虐,繼續(xù)判斷下一個與i的值是否相等。找到不等的值后就將這個值復(fù)制到i的后一位卧须,這樣新的數(shù)組就可以一步一步生成另绩。循環(huán)一直到j(luò)到nums數(shù)組最后就結(jié)束
public int getLength(int[] a){
if(a==null){
return 0;
}
int i=0;
int j=1;
while(i<a.length && j<a.length){
if(a[i]==a[j]){
j++;
}
else if(a[i]!=a[j]){
i=i+1;
a[i]=a[j++];
}
}
return i+1;
}