学习笔记—双指针算法—移动零
双指针算法
移动零
283. 移动零 - 力扣(LeetCode)
题目描述:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2:
输入: nums =[0]
输出:[0]
算法原理:
创建两个指针dest,cur
两个指针的作用:
cur:指向坐标为0的位置,从左往右扫描数组,遍历数组
dest:指向坐标为-1的位置,在处理过的区间内,非零元素的最后一个位置,把处理过的区间分为非零区间和零区间
cur从左往右遍历过程:
遇到0元素,cur++
遇到非0元素,dest++,dest与cur交换,cur++
代码实现:
class Solution {
public:void moveZeroes(vector<int>& nums) {for(int dest=-1,cur=0;cur<nums.size();cur++){if(nums[cur])//处理非0元素{swap(nums[++dest],nums[cur]);}}}
};