方法一:双指针,快指针遍历数组搜索保留值,慢指针指向下一个值的保存位置,最后返回慢指针索引即为最后数组长度。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast=0;
int slow=0; //双指针,慢指针指向被替换的位置
while(fast<nums.size()){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
fast++;
}
return slow;
}
};
方法一优化:双指针初始位置变为首尾,向中间靠近,判断值的顺序有所不同
left=0;
right=nums.size()-1;
if(nums[left]==val)
{ nums[left]==nums[right];
right--;
}
else
left++;
当左边值是val时,把right值赋给left,right右移,
然后下一次循环,判断left(即判断上个循环right的值),
不断将非val的值放到数组左边。
方法二:基础解法:
count=0;
遍历数组,当遇到非val值时,
for (i=0;i<nums.size();i++){
if(nums[i]!=val)
{ nums[count]=nums[i];
count++;
}
}
return count;