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:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

 Runtime: 60ms

 1 class Solution {
 2 public:
 3     void moveZeroes(vector<int>& nums) {
 4         if(nums.size() <= 1) return;
 5         
 6         int zr = 0, nzr = 0;
 7         while(zr < nums.size()){
 8             while(zr < nums.size() && nums[zr] != 0)
 9                 zr++;
10             nzr = zr + 1;
11             while(nzr < nums.size() && nums[nzr] == 0)
12                 nzr++;
13             
14             if(nzr >= nums.size()) break;
15             swap(nums[zr], nums[nzr]);
16             zr++;
17             nzr++;
18         }
19     }
20 };
原文地址:https://www.cnblogs.com/amazingzoe/p/4891379.html