思路一
暴力法,遍历一次,直接改
class Solution(object):
def moveZeroes(self, nums):
nums[:] = list(filter(lambda x: x!=0,nums)) + list(filter(lambda x: x==0,nums))
if not nums:
return []
for i in range(len(nums)):
if nums[i] == 0:
nums.remove(0) #此处不能用pop()
nums.append(0)
也可改为一行代码
class Solution(object):
def moveZeroes(self, nums):
nums[:] = list(filter(lambda x: x!=0,nums)) + list(filter(lambda x: x==0,nums))
思路二
第一次遇到非零元素,将非零元素与数组nums[0]互换,第二次遇到非零元素,将非零元素与nums[1]互换,第三次遇到非零元素,将非零元素与nums[2],以此类推,直到遍历完数组
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j = 0
for i in range(len(nums)):
if nums[i] != 0:
nums[j] , nums[i]= nums[i] , nums[j]
j += 1
# 思路:第n个位置[n-1]放第n个不为0的数字(交换),需要一个计数,来统计不为0的个数
# cnt = 0
# for i in range(n):
# if nums[i] != 0:
# if cnt != i: # 只对位置不正确的进行替换操作,原本位置就对的,不需要操作
# nums[cnt] = nums[i]
# nums[i] = 0
# cnt += 1 # 累加