前言:
双指针算法的适用场景:
数组划分
数组分块
题目
算法原理
定义两个指针
dest:已处理的区间内,非零元素的最后一个位置
cur:从左往右扫描数组,遍历数组
最终 确定下来三个区间
非零区间 零区间 待处理的区间
如何做到:cur从前往后遍历的过程中
- 1,遇到0元素 cur++;
- 2,遇到非零元素dest++,cur++;
补充:双指针的思想在快速排序中也有体现!
代码实现
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int cur =0;
int dest =-1;
while(cur < nums.size())
{
if(nums[cur])
{
swap(nums[++dest],nums[cur]);
}
cur++;
}
}
};
- 这里的时间复杂度 O(n) 空间复杂度O(1)