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.
Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.
主要思想是:依次寻找,找到0 后于之最先遇到的非0元素进行调换。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
vector<int>& newnum=nums;
cout<<newnum.size();
cout<<"\nok\n";
vector<int>::size_type nx;
for (vector<int>::size_type ix = 0; ix < newnum.size()-1; ++ix)
{
if (newnum[ix] == 0){
nx = ix;
while (nx !=newnum.size()){
//进行交换
if(newnum[nx]){
newnum[ix] = newnum[nx];
newnum[nx] = 0;
break;
}
nx++;
/*cout<<nx++;*/
}
/* if (nx==newnum.size())
break;*/
}
}
}
};