283. Move Zeroes

来源:互联网 发布:java不关闭流 编辑:程序博客网 时间:2024/06/01 18:56

leetcode 283

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的位置,第二个指针记录此后非0的位置,依次交换这些非0值与第一个指针位置上的0值,直至第一个指针后不再有非0值。代码如下:

#include<iostream>#include<vector>using namespace std;class Solution {public:    void moveZeroes(vector<int>& nums) {        int pos;int i=0;while(i<nums.size()) {if(nums[i]==0)//发现第一个0{pos=i;//记录需要交换的位置,0值for(;i<nums.size();i++){if(nums[i]!=0)//非0值,交换非0的数字至记录的位置pos{int temp=nums[i];nums[i]=nums[pos];nums[pos]=temp;pos++;}}}i++;}    }};void main(){Solution S;int a[]={0, 0,1, 0, 3, 12};int count=sizeof(a)/sizeof(int);vector<int> v(a,a+count);S.moveZeroes(v);for(int i=0;i<v.size();i++)cout<<v[i]<<" ";cout<<endl;}


0 0