题目:移除元素

解法一:

  1. 先对整个数组进行排序,将相同元素堆到一起
  2. 然后通过两次遍历找到重复元素的起始、终止下标
  3. 最后一键清除

removeElement()

 1int removeElement(vector<int>& nums, int val)
 2{
 3    std::sort(nums.begin(), nums.end());
 4    int start = 0;
 5    while(start < nums.size() && nums[start] != val)
 6    {
 7        start++;
 8    }
 9    if(start == nums.size()) return nums.size();
10    int end = start;
11    while(end < nums.size() && nums[end] == val)
12    {
13        end++;
14    }
15
16    nums.erase(nums.begin() + start, nums.begin() + end);
17    return nums.size();
18}

解法二: 使用到的是快慢指针

快指针负责遍历整个数组,慢指针负责指向下一个“不等于 val”的元素的位置

如果 fast 指向的不是 val,就将这个元素放到前面去,最后 slow 前面的元素代表的就全是“不等于 val”的数字

removeElement()

 1int removeElement(vector<int>& nums, int val)
 2{
 3    int slow = 0, fast = 0;
 4    for(; fast < nums.size(); fast++)
 5    {
 6        if(nums[fast] != val)
 7        {
 8            nums[slow] = nums[fast];
 9            slow++;
10        }
11    }
12    return slow;
13}

来源:语雀原笔记