从排序数组中删除重复项
问题描述:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
原题链接:从排序数组中删除重复项
审题
- 关键字:排序数组、原地删除、O(1) 额外空间
思路
- 因为是排序数组,所以重复出现的元素一定是连在一起的
- 用后面的数覆盖前面的数可以做到原地删除
- 用一个int类型的数存储当前数组的长度,每删除一个元素这个数就减一
代码
class Solution {
public int removeDuplicates(int[] nums) {
if(nums==null||nums.length<2){
return nums.length;
}
int a = nums[0];
int length = nums.length;
for(int i=1;i<nums.length;i++){
if (i<length){
if(a==nums[i]){
for(int j = i;j<nums.length-1;j++){
nums[j] = nums[j+1];
}
i--;
length--;
}else{
a=nums[i];
}
}else
break;
}
return length;
}
}
注: 以上代码不是最优解,如果你有更好的想法,快去尝试吧!