删除有序数组的重复项(力扣26题)
题目:给你一个 非严格递增排列 的数组 nums
,请你** 原地** 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums
中唯一元素的个数。
/**
* 解题思路:使用快慢指针fast、slow,fast先走,找到一个不重复的元素就让slow+1,并将nums[fast]赋值给nums[slow],
* 然后慢指针再走,这样就能保证nums[0...slow]之间没有重复值了。
*/
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) {
return 0;
}
int slow = 0; //定义快慢指针
int fast = 0;
for (fast = 0; fast < nums.length; fast++) {
//发现nums[fast]不等于nums[slow]就让slow++并且将nums[fast]的值赋值给nums[slow]
if (nums[fast] != nums[slow]) {
slow++;
nums[slow] = nums[fast];
}
//这里每次fast都会前进一次,for循环默认帮我们做了
}
//因为slow是从0开始的,而我们要返回的是不重复的个数,因此要+1.
return slow + 1;
}
}