美文网首页
Python LeetCode-283 移动零

Python LeetCode-283 移动零

作者: Jayce_xi | 来源:发表于2021-02-18 10:56 被阅读0次

    1.题目描述:

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

    示例:
    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]
    说明:

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

    2.分析

    这个问题首先思考到的是将所有0放置到最末尾,那和冒泡排序,将所有最大的数放置到最末尾是一个原理,所以第一种方式可以采用冒泡排序的方式,将所有的0冒泡到最末尾。

    第二种方式解决不是自己想出来的,而是通过扩张原有的数组,将为0的pop出去,这种方式感觉是利用的列表的原有方法,不是太好,不过速度非常的快,可以借鉴。

    3.解决

    冒泡的方式

    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            for i in range(len(nums)):
                for j in range(len(nums)-i-1):
                    if nums[j] == 0:
                        nums[j], nums[j+1] = nums[j+1], nums[j]
    

    采用pop方式

    class Solution:
        def moveZeroes(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            length = len(nums)
    
            j = 0
            for i in range(length):
                if nums[i] == 0:
                    nums.append(0)
                    j += 1
    
            i = 0
            while j:
                if nums[i] == 0:
                    nums.pop(i)
                    j -= 1
                else:
                    i += 1
    

    相关文章

      网友评论

          本文标题:Python LeetCode-283 移动零

          本文链接:https://www.haomeiwen.com/subject/eyugxltx.html