当前位置: 首页 > news >正文

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:continueif 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,0while right<len(nums):if nums[right]!=0:nums[left],nums[right]=nums[right],nums[left]left+=1right+=1

http://www.lryc.cn/news/271053.html

相关文章:

  • neovim调试xv6-riscv过程中索引不到对应头文件问题
  • 轻量应用服务器与云服务器CVM对比——腾讯云
  • 骑砍战团MOD开发(31)-游戏AI控制
  • flutter学习-day21-使用permission_handler进行系统权限的申请和操作
  • 虹科方案丨L2进阶L3,数据采集如何助力自动驾驶
  • Kubernetes 学习总结(42)—— Kubernetes 之 pod 健康检查详解
  • 【后端】Docker学习笔记
  • UE5.1_Gameplay Debugger启用
  • 【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models
  • 速盾cdn:ddos防护手段
  • STL——queue容器
  • gitLab页面打tag操作步骤
  • 神秘的Cookie和Session
  • springboot接口文档
  • 深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
  • Maven的使用和配置
  • MongoDB 数据类型
  • Java 将 List 转换为 String常见方式
  • Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)
  • idea 出现Cannot resolve symbol ‘springframework‘解决方法
  • ubuntu22.04安装anacoda遇到的坑
  • window的OPen方法,弹窗的特征
  • DFS算法查找所有路径详解
  • 单片机的存储、堆栈与程序执行方式
  • Web3开发成本和主要特性
  • 【数学建模美赛M奖速成系列】Matplotlib绘图技巧(一)
  • 005、数据类型
  • 软考网络工程师考试大纲(2018年最新版)
  • 【数据结构】栈【详解】
  • CSS 纵向底部往上动画