我的思路
尝试使用双指针法。
- 快指针遍历到非val值,
- 将非val值传给慢指针所在位置,
- 慢指针+1
int removeElement(vector<int>& nums, int val) {
if(nums.empty()) return 0;
int i, j;
for(i = 0; i < nums.size(); ++i){
if(nums[i] == val) break;
}
j = i + 1;
for( ; j < nums.size(); ++j){
if(nums[j] != val){
nums[i++] = nums[j];
}
}
return i;
}
对于初始值纠结了一下……
一些改进
当i, j 都从0开始就不会漏掉情况。
int removeElement(vector<int>& nums, int val) {
if(nums.empty()) return 0;
int i, j;
for(i = 0, j = 0; j < nums.size(); ++j){
if(nums[j] != val){
nums[i++] = nums[j];
}
}
return i;
}
在我的思路中,跳过了一开始慢指针不在val值上的情况;
在一些改进中,当慢指针一开始不在val值上时,将自己赋给自己,不产生变化。