移除元素:力扣27
暴力解法1:
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len=nums.size();
for(int i=0;i<len;i++)//i<len不是i<nums.size()
{
if(nums[i]==val)
{
for(int j=i+1;j<len;j++)//j<len不是i<nums.size()
{
nums[j-1]=nums[j];//j的取值
}
i--;//易错:否则会漏掉新数组的nums[i]
len--;
}
}
return len;
}
};
暴力解法2
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int len=nums.size();
for(int i=0;i<len;i++)//i<len
{
if(nums[i]==val)
{
for(int j=i;j<len-1;j++)//j<len-1
{
nums[j]=nums[j+1];//j的取值
}
i--;//易错
len--;
}
}
return len;
}
};
双指针
问题1:不清楚多个相同值时fast指针和slow指针的赋值关系
问题2:不清楚len的处理
解决方法:return slow
问题3:不清楚循坏条件
解决方法:用fast指针循坏
class Solution
{
public:
int removeElement(vector<int>& nums, int val)
{
int len=nums.size();
int slow=0,fast=0;
for(; fast<nums.size(); fast++)
{
if(nums[fast]!=val)
{
nums[slow++]=nums[fast];
}
}
return slow;
}
};