题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。
题目链接:. - 力扣(LeetCode)
文章讲解:代码随想录
视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili
暴力解法:就是先逐个元素遍历,发现元素相等之后就让后面所有元素往前一位,然后让size-1和此刻数组元素下标i-1。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int size=nums.size();
for(int i=0;i<size;i++)
if(nums[i]==val)
{
for(int j=i+1;j<size;j++)
{
nums[j-1]=nums[j];
}
size--;
i--;
}
return size;
}
};
错误原因:nums.size()写成了nums.size;
判断是否等于应该是两个=号;
双指针写法:
class Solution {
public:
int removeElement(vector<int>& nums, int val)
{
int slowindex=0;
for(int fastindex=0;fastindex< nums.size();fastindex++)
{
if(val!=nums[fastindex])
{
nums[slowindex]=nums[fastindex];
slowindex++;
}
}
return slowindex;
}
};
错误原因:class Solution{};最后的花括号后面是有分号的;
直接return slowindex不用size--和return size;