leetcode-283.移动零-day13

方法一:双指针遇 0 交换

1. 基本思路回顾

该方法使用了两个指针mim用于标记当前已经处理好的非零元素应该放置的位置,i用于遍历整个数组。当遇到nums[m]0时,会通过内层while循环找到下一个非零元素(如果存在的话),然后将这个非零元素与nums[m]进行交换,使得非零元素不断往前移动,最终实现将所有零元素移到数组末尾的效果。

2. 时间复杂度分析

  • 最好情况:数组本身就是已经将非零元素排在前面,零元素排在后面的有序状态,此时内层while循环每次都不会执行,整个算法只需要遍历一遍数组,时间复杂度为 ,其中n是数组nums的长度。
  • 最坏情况:数组中所有元素都是0,那么对于每个0元素(也就是每次nums[m]0时),内层while循环都要一直执行到数组末尾才能找到下一个非零元素(实际上不存在),此时时间复杂度会达到 。平均情况下,时间复杂度介于最好和最坏情况之间,更接近 ,因为存在较多0元素的情况是比较容易出现的,且每次找下一个非零元素都可能需要遍历剩余的部分数组。
3. 空间复杂度分析

该方法只使用了有限的额外变量(如mi以及一些临时用于判断和交换的变量),没有使用与输入数组规模相关的额外数据结构,所以空间复杂度为 ,属于原地算法,不需要额外的大量存储空间。

4. 相对不足

  • 效率不稳定:时间复杂度在不同输入情况下差异较大,特别是在存在较多0元素的数组中,效率会变得很低,因为存在大量的内层循环遍历操作。
  • 代码逻辑稍复杂:存在内层while循环以及多个边界条件判断(如判断i是否越界等),代码的可读性和可维护性相较于更简洁的实现方式会稍差一些,容易出现边界情况考虑不周全导致的错误。

方法二:双指针交换非零元素

1. 基本思路回顾

这个方法同样使用了两个指针iji用于遍历整个数组,j用于标记下一个可以放置非零元素的位置。当nums[i]不为0时,就将nums[i]nums[j]进行交换,然后j自增,保证了非零元素会按照顺序依次放置在数组的前部,最终也能实现将零元素移到数组末尾的目的。

2. 时间复杂度分析

无论输入数组的元素分布情况如何,该方法都只需要遍历一遍数组即可完成零元素的移动操作,对于每个元素,最多执行一次交换操作,所以时间复杂度稳定为 ,效率比较稳定,不受数组中零元素具体分布情况的影响。

3. 空间复杂度分析

和方法一类似,只使用了有限的几个额外变量(如ij以及用于交换的临时变量tmp),空间复杂度为 ,也是原地算法,不会占用额外大量的内存空间。

4. 相对不足

  • 功能扩展性稍弱:该方法的代码结构比较简洁地实现了移动零元素这个特定功能,但如果后续需要在移动零元素的同时对非零元素进行更复杂的处理(比如按照特定规则排序非零元素等),可能需要对代码结构进行较大幅度的修改,不像一些更通用的排序或调整算法那样容易扩展功能。
  • 通用性局限:相对一些通用的数组元素调整算法而言,它只针对移动零元素这个特定需求进行了优化,如果需求变更为移动其他特定值或者按照更复杂规则调整数组元素顺序,可能无法直接复用,需要重新编写逻辑。

总体比较

综合来看,方法二在时间复杂度方面表现更优,具有稳定的  时间复杂度,能高效地处理各种输入情况。而方法一虽然也能实现功能,但时间复杂度受输入数据影响较大,最坏情况效率很低。在代码可读性和可维护性上,方法二相对简洁清晰一些,方法一由于复杂的边界情况处理和嵌套循环使得代码更易出错。不过在一些特定场景下,如果代码所在的环境对空间复杂度要求极为苛刻且输入数据基本能保证较好的情况(比如基本不会出现大量连续0的情况),方法一也是可以考虑使用的一种实现方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python入门】Python控制成分

文章一览 一 、顺序结构二、分支结构多分支结构 三、循环结构1. for语句循环结构range()函数 2. while语句构成循环1)while 循环流程 3、for 循环和 while 循环的区别4、for 循环和 while 循环效率比较 四、函数1、函数定义1) 内置函数2) 非内…

scala中模式匹配的应用

package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息,匹配到对应的类// 注意:// 1 匹配的时候,case class的属性个数要对上// 2 属性名不需…

【D3.js in Action 3 精译_046】DIY 实战:在 Observable 平台利用饼图布局函数实现 D3 多个环形图的绘制

当前内容所在位置: 第五章 饼图布局与堆叠布局 ✔️ 5.1 饼图和环形图的创建 ✔️ 5.1.1 准备阶段(一)5.1.2 饼图布局生成器(二)5.1.3 圆弧的绘制(三)5.1.4 数据标签的添加(四&#…

IP地址查询的背后②:IP地址(IPv4)的构成、类型以及子网划分

自从各大平台将IP地址显示之后,相信广大网友对于IP地址相当不陌生了。而我们见到的IP地址往往只会显示在某市,更仔细的会看到有一段段字节所显示的字符串,而IP地址看似由很简单的1-255之间的数字所组成的四个部分,但其实质上则是二…

Python中的绝对导入与相对导入

如果您从事的Python项目有多个文件,那么您以前可能不得不使用import语句。即使对于拥有多个项目的Python重度使用者(比如我),import也可能会造成混淆!您可能正在阅读本文,因为您想对Python中的import&#…

使用 DeepSpeed 微调 OPT 基础语言模型

文章目录 OPT 基础语言模型Using OPT with DeepSpeedmain.py 解析1、导入库和模块2、解析命令行参数3、main 函数3.1 设备与分布式初始化3.2 模型与数据准备3.3 定义评估函数3.4 优化器与学习率调度器设置3.5 使用 deepspeed 进行模型等初始化3.6 训练循环3.7 模型保存 4、dsch…

计算机网络-GRE Over IPSec实验

一、概述 前情回顾:上次基于IPsec VPN的主模式进行了基础实验,但是很多高级特性没有涉及,如ike v2、不同传输模式、DPD检测、路由方式引入路由、野蛮模式等等,以后继续学习吧。 前面我们已经学习了GRE可以基于隧道口实现分支互联&…

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动 Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动…

《计算机组成及汇编语言原理》阅读笔记:p9-p27

《计算机组成及汇编语言原理》学习第 2 天,p9-p27 总结,总计 19 页。 一、技术总结 1.quantum physics(量子物理学) (1)quantum(量子) quantum的本意是:c. the smallest amount of sth(量子)。 In physics, a quantum is the minimum am…

使用 Dash 构建交互式数据可视化应用

使用 Dash 构建交互式数据可视化应用 1. 什么是 Dash? Dash 是一个由 Plotly 开发的开源 Python 框架,用于快速构建交互式数据可视化应用。Dash 将前端(HTML、CSS 和 JavaScript)与后端(Python)无缝集成&…

Qt:QMetaObject::connectSlotsByName实现信号槽自动关联

简介 在Qt中,QMetaObject::connectSlotsByName 是一个便利的方法,它可以根据对象的对象名(objectName)自动将信号和槽连接起来。但是,要使用这个方法,必须确保: 1 控件(如按钮&…

周末总结(2024/12/21)

工作 人际关系核心实践: 要学会随时回应别人的善意,执行时间控制在5分钟以内 坚持每天早会打招呼 遇到接不住的话题时拉低自己,抬高别人(无阴阳气息) 朋友圈点赞控制在5min以内,职场社交不要放在5min以外 职场的人际关系在面对利…

一般行业安全管理人员考试题库分享

1.在高速运转的机械飞轮外部安装防护罩,属于(B)安全技术措施。 A.限制能量 B.隔离 C.故障设计 D.设置薄弱环节 2.生产经营单位的(B)是本单位安全生产的第一责任人,对落实本单位安全生产主体责任全面负责,具体履行安全生产管理职责。 A.全员 B…

国标GB28181平台EasyGBS在安防视频监控中的信号传输(电源/视频/音频)特性及差异

在现代安防视频监控系统中,国标GB28181协议作为公共安全视频监控联网系统的国家标准,该协议不仅规范了视频监控系统的信息传输、交换和控制技术要求,还为不同厂商设备之间的互联互通提供了统一的框架。EasyGBS平台基于GB28181协议&#xff0c…

概率论得学习和整理29: 用EXCEL 描述二项分布

目录 1 关于二项分布的基本内容 2 二项分布的概率 2.1 核心要素 2.2 成功K次的概率,二项分布公式 2.3 期望和方差 2.4 具体试验 2.5 概率质量函数pmf 和cdf 3 二项分布的pmf图的改进 3.1 改进折线图 3.2 如何生成这种竖线图呢 4 不同的二项分布 4.1 p0.…

长短期记忆网络(LSTM):深度学习中的序列数据处理利器

目录 ​编辑 长短期记忆网络(LSTM):深度学习中的序列数据处理利器 引言 LSTM的起源与背景 LSTM的核心机制 LSTM的优势 LSTM的应用案例 LSTM的研究进展 LSTM的变种 LSTM的改进 LSTM的最新研究 结论 长短期记忆网络(LST…

代码随想录第52天

110.字符串接龙 #include<iostream> #include<unordered_map> #include<queue> using namespace std; // 定义一个类用来解决本道题 class Xxc { private:// 用来记录可以每个字符可以改变的可能static char libs[26]; public:static int xxc(unordered_ma…

2024年前端面试题【基本功篇】

文章目录 前言一、html 相关1.1 行内元素和块级元素分别有哪些&#xff1f;1.2 IE盒子模型和标准盒子模型 二、css 相关2.1 选择器2.2 设置垂直居中的方法2.3 定位的几种方式2.4 清除浮动的几种方式2.5 rem、em、px、vw、vh区别2.6 响应式和自适应布局的区别2.7 元素隐藏的几种…

图解HTTP-HTTP状态码

状态码 状态码的职责是当客户端向服务器端发送请求时&#xff0c;描述返回的请求结果。 类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess&#xff08;成功状态码&#xff09;请求正常处理完毕4XXRedirection &#xff08;重定向状态码&#xff09;需要…

Excel设置生日自动智能提醒,公式可直接套用!

大家好&#xff0c;我是小鱼。 今天跟大家分享一个WPS表格中根据出生日期&#xff0c;设置生日提醒&#xff0c;并且根据距离生日天数自动标记数据颜色。简单又实用&#xff0c;一个公式轻松搞定&#xff01; 接下来我们先学习一下需要使用到的函数&#xff0c;然后再根据实例让…