给定一个数组nums, 编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0, 1, 0, 3, 12]
输出:[1, 3, 12, 0, 0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
方法1:
思路:遍历列表,查找不为0的元素,按索引重新存进数组中,当找到k个不为0的元素后,将后面全部补充为0。
class Solution:
def moveZeroes(self, nums):
k = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[k] = nums[i]
k += 1
for i in range(k, len(nums)):
nums[i] = 0
方法2:(大佬的智慧)
思路:采用两个索引:fast和slow,均付初值0。fast在找到非零元素后将其依次存进slow中,同时将该位置元素改为0,故当fast遍历完数组后,不为0 的全部存于slow中,而后面的元素全被修改为0。
class Solution:
def moveZeroes(self, nums):
length = len(nums)
if length <= 1:
return
slow = fast = 0
while fast < length:
if nums[fast] != 0:
if slow != fast and nums[slow] == 0:
nums[slow] = nums[fast]
nums[fast] = 0
slow += 1
fast += 1