双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针
- 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
- 慢指针:指向更新 新数组下标的位置
1 2 3 4 5 6 7 8 9 10
| slow=0; val=3 nums[0,1,2,3,3,0,4,2]; for(int fast=0;fast<size;fast++){ if(nums[fast]!=val){ nums[slow]=nums[fast]; slow++; } } return slow;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
class Solution { public: int removeElement(vector<int>& nums, int val) { int leftIndex = 0; int rightIndex = nums.size() - 1; while (leftIndex <= rightIndex) { while (leftIndex <= rightIndex && nums[leftIndex] == val){ ++leftIndex; } while (leftIndex <= rightIndex && nums[rightIndex] != val) { -- rightIndex; } if (leftIndex < rightIndex) { nums[leftIndex++] = nums[rightIndex--]; } } return leftIndex; } };
|