leetcode原题链接:移动零
上一篇:HOT3-最长连续序列
下一篇:HOT5-盛最多水的容器
题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums =[0,1,0,3,12]
输出:[1,3,12,0,0]
示例 2: 输入: nums =[0]
输出:[0]
解题方法:采用双指针,假设指针名为left和right。从左向右方向,left指针指向第一个0所在的位置,right指针指向left指针后第一个非0的位置,也就是说始终保持[left, right)区间的元素都是0,动态移动这个窗口。
代码如下
#include <iostream>
#include <vector>
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int n = nums.size();
int left = 0; //指向第一个0的位置
int right = 0; //指向left后面第一个非0的位置
// 所以,保持结构上(left, right)之间都是0
while (right < n) {
if (nums[right] != 0) {
std::swap(nums[left++], nums[right]);
}
right++;
}
}
};