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.

 

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

把0搬到后面去,同时保证in-place,顺序也不能变。如果可以创一个新的vector话就太简单啦~~

我的思路就是把第一个0和0之后的第一个非0交换一下,想想简单,实现了半天(太菜啦;))

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        
        int size = nums.size();
        
        int j = 0;
        
        for(int i = 0; i < size; ++i)
        {
            if(nums[i] != 0)
            {
                swap(nums[i], nums[j]);
                ++j;//前端第一个为0的位置
            }
        }
    }
};

再贴一个很好的方法

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int j = 0;
        // move all the nonzero elements advance
        for (int i = 0; i < nums.size(); i++) {
            if (nums[i] != 0) {
                nums[j++] = nums[i];
            }
        }
        for (;j < nums.size(); j++) {
            nums[j] = 0;
        }
    }
};

 

posted @ 2018-03-18 16:06  还是说得清点吧  阅读(95)  评论(0编辑  收藏  举报