0
点赞
收藏
分享

微信扫一扫

算法练习——移动零 leetcode.283 python

花明 2022-03-11 阅读 52

题目描述:

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

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

方法一:暴力双重循环 i j两个指针一前一后进行交换排序

    if len(nums) == 1:
        return nums
    i = 0
    j = 1
    k = 0
    while k <= len(nums):
        while i < len(nums)-1:
            if nums[i] == 0:
                temp = nums[i]
                nums[i] = nums[j]
                nums[j] = temp
            i = i + 1
            j = j + 1
        k = k + 1
        i = 0
        j = i + 1
    return nums

不出所料,超出了时间限制。

方法二:思路是只关注非零元素 最后统一填0

i j 一前一后 分两次循环 先关注所有的非0数字 后填充0

def moveZeroes(nums):
    if len(nums) == 1:
        return nums
    i = 0
    j = 0
    # 第一个while循环的目的 i指针自动跳过前面的0 j指针指过的就是最终排序
    while i < len(nums):
        if nums[i]!=0:
            nums[j]=nums[i]
            j = j + 1
        i = i + 1
    # 第二个while循环的目的 该排的数字已经排好了 把剩下的0填充
    while j < len(nums):
        nums[j] = 0
        j = j + 1
    return nums
举报

相关推荐

0 条评论