leetcode:删除有序数组中的重复项II
这两道题我感觉精髓在于
你要牢记一点
慢指针之前包括当前永远是排好的值
快指针是用来探路的
这其实就是快慢指针的精髓
还有就是你不要想复杂了
快慢指针能有多复杂?就两个指针移而已
通过计数变量来确定是否等于2
之后这个计数变量还要初始化
即可
和I一样的,就是在I的代码上增加一个变量,这个变量用于计数是否到了2
I的代码
class Solution {
public int removeDuplicates(int[] nums) {
int slow = 0;
int fast = 0;
while(nums.length==0){
return 0;
}
while(fast<nums.length){
if(nums[slow]!=nums[fast]){
slow = slow + 1;
nums[slow] = nums[fast];
}
fast = fast + 1;
}
return slow+1;
}
}
II的代码
class Solution {
public int removeDuplicates(int[] nums) {
int slow = 0, fast = 0;
int count = 0;
while(fast < nums.length) {
if(nums[fast] == nums[slow]) {
count++;
if(count == 2) {
slow = slow + 1;
nums[slow] = nums[fast];
}
fast++;
}
else{
slow = slow + 1;
nums[slow] = nums[fast];
fast = fast + 1;
count = 1;
}
}
return slow + 1;
}
}