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

双指针的两种方法

方法一:时间复杂度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 @   今夜无风  阅读(173)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示