【求知=>算法】移动零

100 阅读1分钟

【求知=>算法】移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]

输出: [1,3,12,0,0]

说明:

  1. 必须在原数组上操作,不能拷贝额外的数组。
  2. 尽量减少操作次数。

解题思路


  1. 直接判断当前值是否等于0,如果等于0就删除掉,然后在末尾补0
nums = [0,1,0,3,12]
for j in nums:
    if j == 0:
        nums.remove(j)
        nums.append(j)
    else:
        pass
  1. 双指针思路:

j指针向右移动,遇到等于0的情形不进行操作,而i代表此时为0的总个数。

如果此时i的总个数不为0,就将j-i的位置即第一个0的位置和当前不为0的j的位置交换,循环往复,就将不为0的j都换到了前面去。

nums = [0,1,0,3,12]

i = 0
for j in range(len(nums)):
    if nums[j] ==0:
        i+=1
        
    elif i!=0:
        nums[j-i] = nums[j]
        nums[j]=0
        

博客来源:雨夜的博客