leetcode 27 移除元素

简介: leetcode 27 移除元素

移除元素


0962495f6bbb4b779809acd1b997f383.png

6a99808f2482470bbb1b40b6d097f499.png

第一次做的版本

理解有错误,不能使用额外的空间。

#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        vector<int> temp;
        int i=0, j=0;
        for ( i = 0; i < nums.size(); i++)
        {
            if (nums[i] != val) 
            {
                temp.push_back(nums[i]);
                j++;
            }
        }
        nums = temp;
        return temp.size();
    }
};
int main()
{
    vector<int> my_nums = { 0,1,2,2,3,0,4,2 };
    int my_val= 2;
    Solution a;
    cout << a.removeElement(my_nums, my_val) << ", nums = [";
    for (int i=0; i < my_nums.size(); i++)
    {
        cout << my_nums[i] << ' ';
    }
    cout <<'}'<< endl;
  return 0;
}

暴力解法

#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int i=0, j=0;
        int size = nums.size();
        for ( i = 0; i <size; i++)
        {
            if (nums[i] == val) 
            {
                for (j = i; j < size-1; j++)
                {
                    nums[j] = nums[j + 1];
                }
                size--;
                i--;
            }
        }
        return size;
    }
};
int main()
{
    vector<int> my_nums = { 0,1,2,2,3,0,4,2 };
    int my_val= 2;
    Solution a;
    cout << a.removeElement(my_nums, my_val) << ", nums = [";
    for (int i=0; i < a.removeElement(my_nums,my_val); i++)
    {
        cout << my_nums[i] << ' ';
    }
    cout <<']'<< endl;
  return 0;
}

双指针法

#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int fastIndex = 0, slowIndex = 0;
        for (fastIndex = 0; fastIndex < nums.size(); fastIndex++)
        {
            if (nums[fastIndex] != val)
            {
                nums[slowIndex] = nums[fastIndex];
                slowIndex++;
            }
        }
        return slowIndex;
    }
};
int main()
{
    vector<int> my_nums = { 0,1,2,2,3,0,4,2 };
    int my_val= 2;
    Solution a;
    cout << a.removeElement(my_nums, my_val) << ", nums = [";
    for (int i=0; i < a.removeElement(my_nums,my_val); i++)
    {
        cout << my_nums[i] << ' ';
    }
    cout <<']'<< endl;
  return 0;
}

二刷

库函数删除

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        for(int i=0 ; i<nums.size() ;)
        {
            if(nums[i]==val)
            {
                nums.erase(nums.begin()+i);
                continue;
            }
            i++;
        }
        return nums.size();
    }
};

快慢指针

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int result =0;
        for(int i=0 ; i<nums.size() ;i++)
        {
            if(nums[i] != val)
            {
                nums[result] = nums[i];
                result++;
            }
        }
        return result;
    }
};

相关文章
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
23 1
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
1月前
|
算法
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
16 1
|
2天前
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
|
7天前
|
算法
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
代码随想录算法训练营第五十七天 | LeetCode 739. 每日温度、496. 下一个更大元素 I
11 3
|
11天前
|
算法
【力扣】169. 多数元素
【力扣】169. 多数元素
|
1月前
|
存储 JavaScript
leetcode82. 删除排序链表中的重复元素 II
leetcode82. 删除排序链表中的重复元素 II
22 0
|
1月前
leetcode83. 删除排序链表中的重复元素
leetcode83. 删除排序链表中的重复元素
10 0
|
1月前
|
算法 搜索推荐
LeetCode刷题---215. 数组中的第K个最大元素(双指针,快速选择)
LeetCode刷题---215. 数组中的第K个最大元素(双指针,快速选择)
|
29天前
|
机器学习/深度学习 算法
力扣刷题日常(一)
力扣刷题日常(一)
20 2