R5-双指针
要用双指针来实现,想到一个办法,左右两边双指针,当左边指针找到0就和右指针交换值,要减少操作次数的话,就顺便判断一下右指针是否为0即可,最后肯定是双指针碰撞的。
不对,不能交换值,因为不能移动非零元素的相对位置
那就让两个指针相邻从数组头出发,遇到0就交换值,right的值应该不为0才对
分个类就ok了
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n=len(nums)
if n<2:
return nums
left,right=0,1
while right<n:
if nums[left]==0 and nums[right]!=0:
nums[left],nums[right]=nums[right],nums[left]
left+=1
right+=1
elif nums[left]==0 and nums[right]==0:
right+=1
elif nums[left]!=0:
left+=1
right+=1
简单简化代码:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n=len(nums)
if n<2:
return nums
left,right=0,1
while right<n:
if nums[left]==0 and nums[right]!=0:
nums[left],nums[right]=nums[right],nums[left]
left+=1
elif nums[left]!=0:
left+=1
right+=1