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:
- You must do this in-place without making a copy of the array.
- 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;
}