数组里的零全部移动到后面,其余数字顺序保持不变

双指针的两种方法

方法一:时间复杂度logN,空间复杂度1

nums = [1,2,0,5,7,0]
low = 0 # 指向非零部分的最后一个位置
fast = 0 # 遍历列表元素
n = len(nums)
while fast < n:   # 走一遍,原始空间上已经存有非零数字
    if nums[fast]!=0:  # 遇到非零元素将其存到nums对应low位置,同时low指向一下位置
        nums[low]=nums[fast]
        low += 1
    fast += 1
while low < n:  # 后半部分补零
    nums[low]=0
    low += 1
nums

方法二:零和非零元素互换

nums = [1,2,0,5,7,0]
low, fast = -1, 0  # low记录非零元素的最后一个位置,fast记录不是零元素位置和low+1位置元素互换
n = len(nums)
while fast<n:  # 走一遍,
    if nums[fast]!=0:
        low += 1
        nums[low], nums[fast] = nums[fast], nums[low]
    fast += 1
nums    

 

posted @ 2022-07-23 15:49  今夜无风  阅读(156)  评论(0编辑  收藏  举报