其他分享
首页 > 其他分享> > 数组里的零全部移动到后面,其余数字顺序保持不变

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

作者:互联网

双指针的两种方法

方法一:时间复杂度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    

 

标签:顺序,nums,元素,非零,fast,while,low,数组,移动
来源: https://www.cnblogs.com/demo-deng/p/16512191.html