欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

算法--数组中排序移动零

程序员文章站 2022-04-06 13:04:06
题目:283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解题思路1:首先先找出数组中为0的元素,然后把它删除,用append()函数在末尾添加0.Code:class Solution: def moveZeroes(self, nums: List[int]) -> None...

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

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

说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
解题思路1:
首先先找出数组中为0的元素,然后把它删除,用append()函数在末尾添加0.
Code:

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

运行结果:算法--数组中排序移动零

解题思路2:
双指针,右指针不断向右移动,每次当右指针指向非零数时,左右指针对应的数交换,同时左指针向右移。
Code:

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        l = len(nums)
        left = right = 0
        while right < l:
            if nums[right] != 0:
                nums[left],nums[right] = nums[right],nums[left]
                left += 1
            right += 1    

运行结果:
算法--数组中排序移动零

本文地址:https://blog.csdn.net/Kinght_123/article/details/109807172