当前位置:网站首页>leetcode 283:移动零

leetcode 283:移动零

2022-08-10 03:16:00 Rolandxxx

题目描述:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。

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

自己的第一遍解法,for循环里参杂while,O(N2)的时间复杂度,耗时太多

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        """ Do not return anything, modify nums in-place instead. """
        if nums is None or len(nums)==0 or len(nums)==1:
            return nums
        for i, num in enumerate(nums):
            if nums[i] == 0:
                cur = i
                if cur == len(nums)-1:
                    return nums
                while nums[cur+1]==0:
                    cur += 1
                    if cur == len(nums)-1:
                        return nums
                tmp = nums[i]
                nums[i] = nums[cur+1]
                nums[cur+1] = tmp
        return nums
           

优化解法:直接遍历一遍数组,碰到把不为0的值直接就按顺序放到数组index以0开始的对应位置上去,以此递增。

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

原网站

版权声明
本文为[Rolandxxx]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Rolandxxx/article/details/126216319