时间:2021-02-28
题目地址:https://leetcode-cn.com/problems/move-zeroes/
题目难度:Easy
题目描述:
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
思路1:快慢指针
代码段1:通过
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
slow, fast = 0, 0
while fast < len(nums):
if nums[fast] != 0:
nums[slow], nums[fast] = nums[fast], nums[slow]
slow += 1
fast += 1
总结:
- 空链表的特殊判断,最后断开连接这步别忘了
思路2:快慢指针
调用27的函数,最后统一赋值0
代码段2:通过
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
def removeElement(nums, val):
slow, fast = 0, 0
while fast < len(nums):
if nums[fast] != val:
nums[slow] = nums[fast]
slow += 1
fast += 1
return slow
temp = removeElement(nums, 0)
for i in range(temp, len(nums)):
nums[i] = 0
总结:
- 这个思路可能比上边的解法操作少一些,可能写代码的时候确实需要考虑是不是需要封装一下,方便复用,能够节省很多工作量。