26. 删除排序数组中的重复项
题目
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
解题思路
因为数组是有序的,所以相同的元素肯定在一起,我们只需要用快慢指针,来遍历数组,快指针走在前面探路,遇到不重复的元素就赋值给slow的位置。
对于数组相关的问题,一般都避免在数组中间删除元素,都会先想办法把元素移动到数组末尾,然后再删除
代码
class Solution {
public int removeDuplicates(int[] nums) {
int n=nums.length;
if(n==0){
return 0;
}
int slow=0;
int fast=0;
while(fast<n){
//遍历完后nums[0..slow]就是无重复的元素了
//只把不重复的元素赋给nums[slow]
if(nums[fast]!=nums[slow]){
slow++;
nums[slow]=nums[fast];
}
fast++;
}
//长度 比下标大1
return slow+1;
}
}