赞
踩
方法一:双指针,快指针遍历数组搜索保留值,慢指针指向下一个值的保存位置,最后返回慢指针索引即为最后数组长度。
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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。