题目:
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]
.
解答:
可以先用几个例子来模拟操作,假设i为0部分的头
可以发现只需要将i位置和当前出现的非0的位置进行交换,然后将i++即可
如例子 [1,2,3,0,5]
初始化i为0,发现1非0,将i和0位置的交换,然后i++,以此类推到达和3交换完以后,i变为3,遇见0,跳过,然后遇见5,将5和位置3进行交换,就得到了最终结果
而且不可能出现015,此时在处理5但是i等于0的情况,也就是说当前处理的位置和0部分的起点之间一定已经全部都是0
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int size = nums.size();
int zero_start = 0;
for(int i = 0;i < size; ++i)
{
if(nums[i] == 0)
continue;
else
{
int tmp = nums[i];
nums[i] = nums[zero_start];
nums[zero_start] = tmp;
zero_start++;
}
}
}
};