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.
给定一个数组nums,编写一个函数,将数组中的0都移动到数组末尾,保持数组中非0元素的相对顺序。
Example:
Input: [0,1,0,3,12]
Output: [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.
Solutions:
Python
class Solution:
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
nums0 = []
#这种解法其实效率不高,但是对于Python的列表删除应该掌握
#由于list在删除之后长度缩短,所以Python的列表删除都是倒序删除
#range(start, stop[, step]),如下循环就是从list末尾开始,向头部出发,步长为-1
for i in range(len(nums)-1,-1,-1):
if nums[i] == 0:
nums.remove(0)
nums0.append(0)
nums[:] = nums+nums0
C++
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int i = 0,count = 0;
//不为0的时候直接替换,为0的时候计数,最后再将0填入数组后面
for(int num : nums){
if (num != 0){
nums[i] = num;
i++;
}
else{
count++;
}
}
for (int j=nums.size()-count;j<nums.size();j++){
nums[j] = 0;
}
}
};