(来源leetcode)
方法1:把数组中j个非零元素存放在数组的前j项,之后把后边的元素设置为0即可,如下:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
j = 0
#利用变量j,把非零元素放在数组前边
for i in range(len(nums)):
if nums[i] != 0:
nums[j] = nums[i]
j += 1
#后边的元素设置为0
for i in range(j, len(nums)):
nums[i] = 0
方法2: 当发现数组中出现0, 第一步在末尾增加0,第二步删除此0
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(len(nums)):
if nums[i] == 0:
nums.append(0)
nums.remove(nums[i])
方法3: 快慢指针交换思想,快指针指向当前元素,慢指针前边的元素全为非0
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