第283题的要求如下:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
题目的难点在于,不能使用额外的内存空间,必须在原数组上操作。
我想到的常规解法有如下三种,但都不是非常满意,具体如下:
方法一、轮询+remove操作
'''#1: 常规方法,轮询值为0的元素,执行remove操作,并记录操作次数,最后按照删除次数将0添加到列表。用时180ms'''
def moveZeroes1(nums):
cts = 0
i = 0
while (i < len(nums)):
if (nums[i] == 0):
nums.remove(0)
cts += 1
i = (i-1) if i>=1 else 0
else:
i += 1
while (cts != 0):
nums.append(0)
cts -= 1
return nums