上一篇用的是暴力法,比较笨,双层for,时间复杂度肯定是O(n2),所以带来一个O(n)的,大大提高时间利用率.
双指针法
双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
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]; } } return slowIndex; } };
流程 自己在脑子里可以过一遍最后慢指针指的位置下标就是数据的内存大小
最后回顾重点:
快指针是用来获取新数组中的元素
慢指针是用来获取我们新数组中需要更新的位置