题目
难度:★☆☆☆☆
类型:数组
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
示例
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
解答
这里,我们只要循环遍历这个数组,如果遇到零,则把这个零放在数组末尾即可。
def moveZeroes(self, nums):
for num in nums:
if num == 0:
nums.remove(0)
nums.append(0)
return nums
也可以增加一个计数器,用于统计遇到的零的数目,约束遍历的范围(已经移动到末尾的零是不需要再查看的)以提高效率。
class Solution(object):
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
i, count_0 = 0, 0 # 初始化指针和零的个数
while i < len(nums) - count_0: # 只要指针还在要查看的区域内
if nums[i] == 0: # 如果遇到零
nums.append(nums.pop(i)) # 把这个零弹出来,并压入数组末尾
count_0 += 1 # 零的个数+1
else: # 遇到的数不是零
i += 1 # 查看下一个数
如有疑问或建议,欢迎评论区留言~