问题描述
删除排序数组中的重复项:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
示例 1:
给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。
示例 2:
给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
解决方案
题目提示的很明显了,使用双指针拿前面的元素和它的后面的每一个元素进行比较,因为这是一个排序排好了的数组,当有不一样的值的时候,就把后面的赋值给外层循环下标的数,最后输出外层循环的值即可。
代码
//双指针方法
int[] nums = {0,0,1,1,1,2,2,3,3,4};
if(nums==null || nums.length == 1){
System.out.println(nums.length);
}
int i = 0;
int j = 1;
while(j<nums.length){
if(nums[i]==nums[j]){
j++;
}else{
i++;
nums[i]=nums[j];
j++;
}
}
System.out.println(i+1);
总结
这题因为限制死了只能是原地操作,不然可以引入hashMap来进行存储,那样的话,判断起来就很简单了。