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,则停止交换位置。
class Solution {
public:
void moveZeroes(vector<int>& nums) {
for(int i=0; i<nums.size(); i++){
if(nums[i] == 0)
continue;
int current = i;
while(current-1 >=0 && nums[current-1] == 0){
//swap(nums[current], nums[current-1])
int temp = nums[current-1];
nums[current-1] = nums[current];
nums[current] = temp;
current--;
}
}
}
};