[27. Remove Element]

[(https://leetcode.cn/problems/remove-element/)

思路

  • 数组在内存中是连续的,根据此题要求不能删除,而是覆盖

暴力解法

  • 此题暴力解法是两层for循环,一个循环遍历数组元素 ,第二个循环更新数组

  • 时间复杂度:O(n^2)

    空间复杂度:O(1)

双指针法

  • 双指针法:又叫快慢指针法, 一个快指针和慢指针在一个for循环下完成两个for循环的工作
  • 首先,我们需要定义双指针的含义:
    • 快指针:寻找新数组(不含有val)的元素
    • 慢指针:指向新数组的下标
class Solution {public:    int removeElement(vector& nums, int val) {        if(nums.size() == 0) return 0;        int slowindex = 0, fastindex = 0;//定义快慢指针        for(; fastindex < nums.size(); ++fastindex)//因为快指针是寻找新元素,因此需限定快指针范围        {            //若寻找的此新元素等于val,则跳过            if(nums[fastindex] != val)            {                nums[slowindex++] = nums[fastindex];            }        }        return slowindex;//因为慢指针是指向新数组的下标,因此只需返回慢指针索引值    }};
  • 时间复杂度:O(n)

    空间复杂度:O(1)