每日一题——LeetCode977

方法一 个人方法:

以示例1为例:把[-4,-1,0,3,10] 中n<=0的元素拆分出来,把他们的平方从小到大放入arr数组,则arr=[0,1,16]  ,那数组就还剩[3,10] 对于剩下的元素,看arr里面有没有比他们平方更小的元素先放入res数组,3的平方为9,0和1都小于9 ,所以先把0和1先加入res,再把3的平方9加入res,对于10也是如此。

有两种特殊情况需要考虑:

1、nums都是小于等于0的元素,那么arr的长度会等于nums的长度,直接返回arr

2、最大的元素在arr里那么循环结束时arr仍不为空,需要把arr里的元素都加入res

但是该方法嵌套了循环,时间复杂度超过了O(n)

var sortedSquares = function(nums) {var arr = [],res=[]for(var n of nums){if(n<=0){arr.unshift(n*n)}else{while(n*n >= arr[0]){res.push(arr.shift())}res.push(n*n)} if(arr.length===nums.length) return arr}while(arr.length){res.push(arr.shift())}return res
};

消耗时间和内存情况:

方法一优化版(O(n))两次遍历+双指针

还是拆分成两个数组minus保存n<=0的平方 ,plus保存n>0的平方,从minus和plus的开头开始比较,哪个更小就加入res并且向后移一位。当其中一个数组已经都加入res后,把另一个数组剩下的都加入res

var sortedSquares = function(nums) {var minus = [],plus=[],res=[]for(var n of nums){if(n<=0){minus.push(n*n)}else{plus.push(n*n)}}if(minus.length===0) return plusminus.reverse()if(minus.length===nums.length) return minusvar i=0,j=0while(true){if(minus[i]<=plus[j]){res.push(minus[i])i++}else{res.push(plus[j])j++}if(i===minus.length || j===plus.length) break}if(i===minus.length){for(j;j<plus.length;j++){res.push(plus[j])}}else{for(i;i<minus.length;i++){res.push(minus[i])}}return res
};

消耗时间和内存情况: 

 

其他思路 (提供参考):

  1. 遍历所有数值,平方之后再排序,最差解
  2. 贪心,把所有负数扔在一个中间数组中,到正数的时候从中间数组拿出来所有的比正数小的先扔到结果数组中,然后再把当前值放在结果数组
  3. 双指针,从两端夹心对比,比较大的放到结果数组中,然后比较大的往中间进 1,小的不变继续对比

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

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

相关文章

Linux操作系统( YUM软件仓库技术 )

镜像文件的回环挂载&#xff08;把iso镜像文件释放成系统安装光盘&#xff09;foundation0上操作 回环挂载的用法&#xff1a; du -sh 对象名 //估算文件&#xff08;一切对象皆文件&#xff09;大小 !$ //上一条命令的最后一个参数 新创建的挂载点目录是空白目录 挂载&#xf…

kivy开发一个登陆界面

Kivy Kivy是一个用于开发跨平台移动应用&#xff08;如Android和iOS&#xff09;以及桌面应用&#xff08;如Windows、Linux和macOS&#xff09;的Python框架。它采用开源许可证&#xff08;MIT许可证&#xff09;&#xff0c;提供了丰富的图形界面组件和工具&#xff0c;以便…

使用yolov5的2.0分支训练自己的模型并在x3派运行

目录 准备代码、权重、数据集配置环境准备数据标注数据 训练模型转换模型验证模型准备校准数据转换为板上模型模型精度分析 上板 之前训练自己模型的时候使用的是博主 bubbling的1.0分支的代码&#xff0c;博主的 博客比较详细&#xff0c;使用的是VOC2007数据集&#xff0c;…

RK3568笔记七:yolov5-seg实例分割测试验证

若该文为原创文章&#xff0c;转载请注明原文出处。 记录的目的是想在RK3568上实现实例分割&#xff0c;在github的rknn_mode_zoo仓库里看到了例子&#xff0c;带着疑问测试了一下&#xff0c;结果跑通了&#xff0c;这里记录下全过程。 一、环境 1、硬件&#xff1a;正点原…

Java安装详细教程

文章目录 一、JDK 下载 和 安装1.1 选择 Java版本1.2 下载 JDK 二、 配置环境变量2.1 配置环境变量的原因2.2 配置环境变量2.3 验证配置是否成功 参考资料 一、JDK 下载 和 安装 1.1 选择 Java版本 访问 Oracle 官方网站的 Java 下载页面Java Archive | Oracle。 在 “Java …

vue实现滑动切换:切换选项时滑块有滑动过渡的效果

效果图 思路&#xff1a; 1. 高亮的色块是独立的一个盒子&#xff0c;需要插入当前激活的内容用来撑开色块盒子的宽度&#xff0c;这样色块的宽度就会和当前激活的内容宽度一致&#xff0c;色块的字体颜色设置透明即可 2. 色块滑动的距离是读当前激活元素的offsetLeft&#x…

Redis经典五大类型源码及底层实现(二)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理、数据库技术&#x1f525;如果感觉博主的文章还不错的…

【数据结构——图】图的最短路径(头歌习题)【合集】

目录 第1关&#xff1a;单源最短路径完整代码 第2关&#xff1a;多源最短路径输入格式:输出格式:完整代码 第1关&#xff1a;单源最短路径 给一个n(1 ≤ n ≤ 2500) 个点 m(1 ≤ m ≤ 6200) 条边的无向图&#xff0c;求 s 到 t 的最短路。 输入格式: 第一行四个由空格隔开的整…

Springboot整合JSP-修订版本(Springboot3.1.6+IDEA2022版本)

1、问题概述&#xff1f; Springboot对Thymeleaf支持的要更好一些&#xff0c;Springboot内嵌的Tomcat默认是没有JSP引擎&#xff0c;不支持直接使用JSP模板引擎。这个时候我们需要自己配置使用。 2、Springboot整合使用JSP过程 现在很多的IDEA版本即使创建的项目类型是WAR工…

ESP32入门九(超声波测距传感器)

一、超声波测距原理 超声波测距模块可提供非接触式距离感测功能&#xff1b;模块包括超声波发射器、接收器和控制电路。其工作原理为当接收到信号后&#xff0c;发射器发出音速的超声波信号&#xff0c;信号在受到物品阻挡时会返回并被接收器检测到&#xff0c;当接收器检测信…

双侧电源系统距离保护MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 系统原始数据 双侧电源系统模型如图所示&#xff1a; 仿真模型搭建 将线路AB分成Line1和Line2&#xff0c;将线路BC分成Line3和Line4&#xff0c;用三相电压电流测量模块作为系统母线&#xff0c;根据系统已…

04 HAL库下使用定时器产生一个中断

目录 一、定时器的相关知识点 1.定时器的定义 2. 查看时钟配置 3. 定时器的分类 二、实验开始 1. 配置一个定时器 2.打开定时器的中断配置 引言 在本文的开头我想给大家分享一下单片机工作的两种工作模式轮询和中断&#xff08;异步&#xff09;&#xff0c; 中断也叫做…