给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
参考:
// 思路:从第二个数开始依次与第一个数比较,不相等指针后挪,相等则进入处理
// 处理:从相等的那个数后面一个开始,把值往前赋,等于是覆盖那个相等的值,len--,特
// 殊情况:最后一个数与被比较的目标数相等则len--再break
public static int removeDuplicates(int[] nums) {
int len = nums.length;
for (int i = 0; i < len; i++) {//控制被比较的数的下标
for (int j = i + 1; j < len; ) {//比较数的指针
if (nums[i] == nums[j]) {//相等情况,进入,又分两种
//如果j已经到达len-1了,先len--再break
//不能先len-- 否则j已经>len-1了,永远break不了了。
if (j == len - 1) {
len--;
break;
//如果j没有达到len-1就把后面的数依次前挪呗,挪完也要len--
} else {
for (int k = j; k < len - 1; k++) {
nums[k] = nums[k + 1];
}
len--;
}
} else {//不相等情况,指针后挪继续判断
j++;
}
}
}
return len;
}