题目:
Move Zeroes
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
Note:
- You must do this in-place without making a copy of the array.
- Minimize the total number of operations.
Solution {
public:
void moveZeroes(vector<int>& nums) {
if(nums.size()<=1)
return;
int zeroi=0,noni=0;
for(zeroi=0;zeroi<nums.size();++zeroi)
{
if(nums[zeroi]==0)
break;
}
if(zeroi==nums.size())
return;
for(noni=0;noni<nums.size();++noni)
{
if(nums[noni]!=0)
break;
}
if(noni==nums.size())
return;
while(noni<nums.size() )
{
if(noni>zeroi)
swap(nums[zeroi],nums[noni]);
else
noni++;
while(nums[zeroi]!=0)
zeroi++;
while(noni<nums.size() && nums[noni]==0)
noni++;
}
}
};