地址:https://leetcode-cn.com/problems/move-zeroes/
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
思路:
示意图:
思路:
方法一:内置函数,移除零元素,然后再append
方法二:快排思想,零元素与非零元素进行交换
方法三:类似于双指针方式, 往左拉非零元素,剩余的位置置0
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
if nums is None or len(nums) < 1:
return []
length = len(nums)
# 借助于内置函数,删除后再在后面添加
'''
for i in range(length):
if nums[i] == 0:
nums.remove(nums[i])
nums.append(0)
return nums
'''
# 类似于快排,零元素与非零元素交换
'''
j = 0
for i in range(length):
if nums[i]:
nums[j], nums[i] = nums[i], nums[j]
j += 1
return nums
'''
# 双指针法
j = 0
for i in range(length):
if nums[i]:
nums[j] = nums[i] # 往左拉
j += 1
# 非0元素统计完了,剩下的都是0了
for i in range(j, length):
nums[i] = 0
return nums