LeetCode 热题 100——283. 移动零

283. 移动零

提示

简单

2.3K

相关企业

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

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

示例 1:

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

示例 2:

输入: nums = [0]
输出: [0]

提示:

  • 1 <= nums.length <= 104
  • -231 <= nums[i] <= 231 - 1

进阶:你能尽量减少完成的操作次数吗?

方法一:类似冒泡

用冒泡的思想,将前方的0慢慢向后移动,

时间复杂度为:O(n+(n−1)+(n−2)+…+1)=O(n^2)

因此,给定的算法在最坏情况下具有二次时间复杂度。对于包含大量元素的数组,这可能导致性能问题。

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

方法二:双指针

考虑使用双指针法,将非零元素向前移动,移动完成之后0元素均在数组末端。这样的算法具有线性时间复杂度 O(n)。

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

相关推荐

  1. LeetCode 100——283. 移动

    2024-01-02 10:38:02       42 阅读
  2. LeetCode-100:283.移动

    2024-01-02 10:38:02       18 阅读
  3. leetcode100】矩阵置

    2024-01-02 10:38:02       24 阅读
  4. 移动算法(leetcode第283)

    2024-01-02 10:38:02       38 阅读
  5. 力扣100_双指针_283_移动

    2024-01-02 10:38:02       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-02 10:38:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-02 10:38:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-02 10:38:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-02 10:38:02       20 阅读

热门阅读

  1. mysqldump导出函数、存储过程和视图

    2024-01-02 10:38:02       46 阅读
  2. 【排序算法】LeetCode-347. 前 K 个高频元素

    2024-01-02 10:38:02       34 阅读
  3. 系统监视工具 | htop

    2024-01-02 10:38:02       35 阅读
  4. Linux Shell 021-输入输出重定向

    2024-01-02 10:38:02       39 阅读
  5. 概率论基础

    2024-01-02 10:38:02       25 阅读
  6. c基础(二)

    2024-01-02 10:38:02       36 阅读
  7. shell变量详解

    2024-01-02 10:38:02       31 阅读
  8. Android中线程间的通信-Handler

    2024-01-02 10:38:02       33 阅读
  9. 浪潮软件开发校招面试一面凉经

    2024-01-02 10:38:02       38 阅读
  10. 逻辑运算符——and和&的区别

    2024-01-02 10:38:02       35 阅读
  11. Pytest单元测试系列[v1.0.0][pytest插件常用技巧]

    2024-01-02 10:38:02       39 阅读