solution1:
双指针思路,遍历一次
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i=0; //Not Zero
int j=0; //Zero
int l=nums.size();
while(j<l && nums[j]!=0)
j++;
if(j==l)
return;
while(i<l)
{
if(nums[i]!=0)
{
if(i>j)
{
nums[j]=nums[i];
nums[i]=0;
j++;
while(j<l && nums[j]!=0)
j++;
if(j==l)
return;
}
}
i++;
}
}
};
solution2:
这个就不解释了
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int pos=0;
for(int i=0;i<nums.size();i++)
if(nums[i]!=0)
nums[pos++]=nums[i];
for(int i=pos;i<nums.size();i++)
nums[i]=0;
}
};
ps:如果不是0,而是奇偶这样排序,双指针比较好