class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int slow=0;
for(int fast=0;fast<nums.size();fast++){
if(nums[fast]!=val){
nums[slow++]=nums[fast];
}
}
return slow;
}
};
26. Remove Duplicates from Sorted A
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int slow=1;
for(int fast=1;fast<nums.size();fast++){
if(nums[fast]!=nums[fast-1]){
nums[slow++]=nums[fast];
}
}
return slow;
}
};
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int slow=0;
for(int fast=0;fast<nums.size();fast++){
if(nums[fast]){
swap(nums[slow++],nums[fast]);
}
}
}
};
可以看到,这个板块的题目原理是不难的,主要注意以下几点:
1.快慢指针的作用
(1)快指针指向新数组的元素的值(事实上并没有创建新的数组)
(2)慢指针指向新数组的下标。
(3)可能会在此基础上进行一些延伸,比如283题移动零,在这里,当fast的值不为零的时候,快慢指针总是指向同一个元素。一旦遇到零,快指针就会比慢指针走得快。
2.快慢指针的初始值
像力扣26题,slow的初始值设为1,因为数组的第一个元素肯定不是重复元素。