题目
给定一个数组
nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
题目链接:283. 移动零
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
解题思路:
本题要求原地移动零元素,同时保持非零元素的相对顺序不变。核心思路是使用双指针:一个指针 cur 负责遍历数组,另一个指针 dest 始终指向最后一个已就位的非零元素位置。遍历过程中,遇到非零元素就将其交换到 dest + 1 的位置,并让 dest 前进一步;遇到零元素则直接跳过。这样一趟遍历即可完成,所有非零元素依次前移,零元素自然被推到数组末尾。

代码展示:
bash
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int cur = 0,dest = -1;cur < nums.size();)
{
if(nums[cur] == 0)
{
cur++;
}
else
{
swap(nums[dest+1],nums[cur]);
dest++;
cur++;
}
}
}
};