給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度。
不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。
示例 1:
給定數(shù)組 nums = [1,1,2],
函數(shù)應(yīng)該返回新的長(zhǎng)度 2, 并且原數(shù)組 nums 的前兩個(gè)元素被修改為 1, 2。
你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
示例 2:
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函數(shù)應(yīng)該返回新的長(zhǎng)度 5, 并且原數(shù)組 nums 的前五個(gè)元素被修改為 0, 1, 2, 3, 4。
你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
說(shuō)明:
為什么返回?cái)?shù)值是整數(shù),但輸出的答案是數(shù)組呢?
請(qǐng)注意,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見(jiàn)的。
你可以想象內(nèi)部操作如下:
// nums 是以“引用”方式傳遞的。也就是說(shuō),不對(duì)實(shí)參做任何拷貝
int len = removeDuplicates(nums);
// 在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見(jiàn)的。
// 根據(jù)你的函數(shù)返回的長(zhǎng)度, 它會(huì)打印出數(shù)組中該長(zhǎng)度范圍內(nèi)的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int number = 0;
for (int i = 0; i < nums.length; i++) {
// 相鄰兩個(gè)值比較,不同才做統(tǒng)計(jì)操作
if (nums[i] != nums[number]) {
number++;
nums[number] = nums[i];
}
}
// 不同數(shù)字為總量= number+1
return ++number;
}
剛開(kāi)始我還以為是數(shù)組中不允許出現(xiàn)重復(fù)元素
private static int[] getNew(int[] array) {
int n = 0, j = 0;
int temp = 0;
int intArrayNew[] = new int[array.length];
while (n < array.length) {
temp = array[n];
int i = 0;
boolean flag = true;
while (i < intArrayNew.length) {
if (intArrayNew[i] == temp) {
flag = false;
break;
}
i++;
}
if (flag) {
intArrayNew[j] = temp;
j++;
}
n++;
}
return intArrayNew;
}