给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
不要另外定义一个数组,您必须通过用 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;
}
}
网友评论