目录
题目
给你一个 非严格递增排列 的数组 nums
,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums
中唯一元素的个数。
思路
非严格递增:即有可能相等,双指针方便
代码
class Solution {
public int removeDuplicates(int[] nums) {
int slow=1;//和fast开始一起寻找,相当于如果数组最前面就有重复的,我们保留索引为0的那个数字,然后索引为1的数字被删除,所以这里直接定义了从1开始
for(int fast=1;fast<nums.length;fast++){//这里是fast-1,因为如果是0的话,下一步提到了fast-1,就会变成负数,就报错了
if(nums[fast]!=nums[fast-1]){
nums[slow]=nums[fast];
slow++;//这里也可以和上一行合并。写成: nums[slow++]=nums[fast]
}
}
return slow;
}
}