283. Move Zeroes

来源:互联网 发布:什么手机壳防摔 知乎 编辑:程序博客网 时间:2024/06/13 01:20

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.
此题设置两指针,前面一个在0位置等下一个找到非零元素换过去。

class Solution {public:    void moveZeroes(vector<int>& nums) {        int size = nums.size();        for(int i=0;i<size-1;i++){            if(nums[i]!=0) continue;            for(int j=i+1;j<size;j++){                if(nums[j]!=0){                    nums[i]=nums[j];                    nums[j]=0;                    break;                }            }        }    }};

更简单点的

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;        }    }};





原创粉丝点击