LectCode283: Move Zeroes

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

第一种方法思路: 当列表中的元素是0时, 将0添加在元素末尾,然后删除对应的0

def moveZeroes(nums: List[int]) -> None:
    i = 0
    count = 0
    while i < len(nums):
        count += 1
        if count <= len(nums): # 需要判断count,否则当列表中的元素全部是0的时候,会死循环
            if nums[i] == 0:
                nums.append(nums[i])
                nums.remove(0)
            else:
                i += 1
        else:
            break
    return nums

第二种:新建二个空列表, 将列表中非零元素和0分别添加到不同的列表中,之后再合并

def moveZeroes(nums: List[int]) -> None:
    if len(nums) == 1:
        return nums
    zero_list = []
    ans = []
    for i in range(len(nums)):
        if nums[i] == 0:
            zero_list.append(nums[i])
        else:
            ans.append(nums[i])
    ans.extend(zero_list)
    nums[:] = ans[:]
    return nums

第三种:用双指针的方法来写

def moveZeroes(nums: List[int]) -> None:
    i = 0
    if len(nums) == 1:
        return nums
    for j in range(len(nums)):
        if nums[j] != 0:
            if nums[i] == 0:
                nums[i] = nums[j]
                nums[j] = 0
            i += 1
posted @ 2021-12-26 17:13  焰红火  阅读(42)  评论(0)    收藏  举报