給定一個有序數組,你需要原地刪除其中的重復內容,使每個元素只出現一次,并返回新的長度。
不要另外定義一個數組,您必須通過用 O(1) 額外內存原地修改輸入的數組來做到這一點。
示例:
給定數組: nums = [1,1,2],
你的函數應該返回新長度 2, 并且原數組nums的前兩個元素必須是1和2
不需要理會新的數組長度后面的元素
分析:
首先我們要了解,數組一旦生成之后,是不可以增刪元素的,想要變更元素只能生成新的數組,而題目要求不能創建新數組。
初一看到這里也許覺得此題無解,但要仔細讀題,可以發現,不需要理會新的數組長度的后面的元素
。
也就是說,只需要將后面的不重復的元素賦值給前面重復的元素位,最終數組的長度可以保持不變。
而返回值是此有序數組中所有不重復的元素個數,在數組的前端將這些不重復的元素按順序排布即可。
據此分析,此題清晰明了。java解答如下:
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
if (nums.length == 1) {
return 1;
}
int index1 = 0;
int index2 = 2;
for (int i = 1; i < nums.length; i++) {
if (nums[i] > nums[index1]) {
index1 += 1;
continue;
} else {
while (index2 < nums.length) {
if (nums[index2] > nums[index1]) {
nums[i] = nums[index2];
index1 += 1;
break;
}
index2++;
}
}
}
return index1 + 1;
}
}