题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
答案代码
class Solution{
public:
void moveZeroes(vector<int>& nums){
int k = 0;//在数组中[0...K)的元素为非零
//[K..i)为0
//遍历到i时,保证[0...i)都为非0元素,且相对位置没有发生变化
for(int i =0; i < nums.size();i++){
if(nums[i])
if(i != k)
swap(nums[k++],nums[i]);
else //i == k ,数组全为0
k++;
}
}
};
测试代码
#include <iostream>
#include <vector>
using namespace std;
class Solution{
public:
void moveZeroes(vecto