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.
两点法,一个找0,一个找非零,简单题。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int p1 = 0, p2 = 0;
while(p1 < nums.size())
{
if(!nums[p1])
{
p2 = max(p1, p2);
while(p2 < nums.size())
{
if(nums[p2])
{
swap(nums[p1], nums[p2]);
break;
}
p2++;
}
}
p1++;
}
}
};