描述
很简单,就是,遇到重复的,只留一个,保存在数组的左半边。
如:
[0,0,1,1,1,2,2,3,3,4]
变为
[0,1,2,3,4]
分析
使用双指针。
slow指针代表没重复的数应该放置的位置,fast表示遍历的不重复数字的位置:
- nums[fast] == nums[fast - 1],时,代表是重复的,fast往右继续寻找不重复的位置
- nums[fast] != nums[fast - 1] 时,代表找到不重复的了,那应该把不重复的数,放到slow位置上。
如图:
代码
根据分析的逻辑编写代码
class Solution {
public int removeDuplicates(int[] nums) {
int n = nums.length;
if(n==0) return 0;
int slow = 1, fast = 1;
while(fast < n) {
if(nums[fast] != nums[fast-1]) {
nums[slow] = nums[fast];
fast++;
slow++;
} else {
fast++;
}
}
return slow;
}
}