一、题目链接
283. 移动零
二、题目描述
给定⼀个数组 nums ,编写⼀个函数将所有 0 移动到数组的末尾,同时保持⾮零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进⾏操作。
⽰例 1:
输⼊: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
⽰例 2:
输⼊: nums = [0]
输出: [0]
三、解法
思路
双指针 dest 和 cur 将数组划分为三个区间:
- [0,dest]:全部非零元素
- [dest + 1,cur - 1]:全部零元素
- [cur,nums.size()-1]:未处理区间
流程
四、代码
#include <vector>
class Solution
{
public:void moveZeroes(vector<int>& nums) {int cur = 0, dest = -1;while(cur < nums.size()){if(nums[cur]){swap(nums[++dest],nums[cur]);}++cur;}}
};
运行结果