题目:
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
思路一:
首先,查询list集合中0的个数n,然后把这些0都删除掉。最后再在末尾添加上n个0。
代码一:
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
n = nums.count(0)
for i in range(n):
nums.remove(0)
nums.extend([0]*n)
思路二:
从后向前遍历整个数组,遇到0,就将0之后的每一位向前移动一位,然后再给最后一位补0。
代码二:
class Solution {
public void moveZeroes(int[] nums) {
for(int i = nums.length-1;i >= 0;i--){
if(nums[i] == 0){
for(int j = i+1;j < nums.length;j++){
nums[j-1] = nums[j];
}
nums[nums.length-1] = 0;
}
}
}
}