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

977.有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

class Solution {public int[] sortedSquares(int[] nums) {// 找到绝对值最小的数下标int minIdx = -1;int min = Integer.MAX_VALUE;int len = nums.length;for(int i = 0; i < len; i++){if(min > Math.abs(nums[i])) {min = Math.abs(nums[i]);minIdx = i;}nums[i] = nums[i] * nums[i];}// 以这个最小下标为界,int max = Integer.MAX_VALUE;int l = minIdx - 1;int r = minIdx + 1;int[] ans = new int[len];ans[0] = min * min;int i = 1;// 必须满足其一,才能进入循环。当都不满足的时候,就是ans赋值完毕的时候。while(l >= 0 || r < len) {if(l == -1) {ans[i++] = nums[r++];continue;} else if(r == len) {ans[i++] = nums[l--];continue;}// if(nums[l] > nums[r]) ans[i++] = nums[r++];// else ans[i++] = nums[l--]; ans[i++] = nums[l] > nums[r] ? nums[r++] : nums[l--];}return ans;}
}

:基本相同写法(将双指针从中将最小值的下表,向两边移动)

public int[] sortedSquares(int[] nums){int n = nums.length;// 先找到绝对值最小的下标int minIdx = -1;int min = Integer.MAX_VALUE;for(int i = 0; i < n; i++){if(min > Math.abs(nums[i])) {min = Math.abs(nums[i]);minIdx = i;}// 顺便将数组的数都平方nums[i] = nums[i] * nums[i];}// 以minIdx为分界,分为左右两部分int[] ans = new int[n];ans[0] = nums[minIdx];int l = minIdx - 1, r = minIdx + 1;int i = 1;while(l >= 0 && r < n) {ans[i++] = nums[l] < nums[r] ? nums[l--] : nums[r++];}// 左部分或者右部分结束了一个if(l == -1) {while(r < n) ans[i++] = nums[r++];} else while(l >= 0) ans[i++] = nums[l--];return ans;
}

:将双指针l、r分别从头和尾向中间移动(简化了很多,不用再处理边界条件)

class Solution{public int[] sortedSquares(int[] nums){int n = nums.length;// 先找到绝对值最小的下标int minIdx = -1;int min = Integer.MAX_VALUE;for(int i = 0; i < n; i++){if(min > Math.abs(nums[i])) {min = Math.abs(nums[i]);minIdx = i;}// 顺便将数组的数都平方nums[i] = nums[i] * nums[i];}// 以minIdx为分界,分为左右两部分int[] ans = new int[n];ans[0] = nums[minIdx];int l = 0, r = n - 1;int i = n - 1;while(l < minIdx || r > minIdx) {ans[i--] = nums[l] > nums[r] ? nums[l++] : nums[r--];}return ans;}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringWeb后端开发-登录认证
  • comfyUI好在哪?为啥大家都在用?
  • android 下拉刷新,androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
  • shell脚本编写注意事项
  • 【Java设计模式】好奇递归模板模式(CRTP):独特地利用多态性
  • 使用Python写一个适用于Dify和FastGPT的JsonPath插件
  • MySql 忘记 Root 密码
  • P0.9/P1.25全倒装共阴节能COB超微小间距LED显示屏已抢占C位
  • OpenHarmony开发:应用分层架构设计
  • Docker基本使用:根据mysql镜像创建mysql容器
  • 大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
  • openshift node NotReady kubelet http: TLS handshake error
  • (苍穹外卖)day03菜品管理
  • mysql中的mysql 库不存在,进行恢复
  • 第十六章 rust命令行工具开发实践
  • 分享的文章《人生如棋》
  • 自己简单写的 事件订阅机制
  • [deviceone开发]-do_Webview的基本示例
  • [译]前端离线指南(上)
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • Angular2开发踩坑系列-生产环境编译
  • Date型的使用
  • docker python 配置
  • Elasticsearch 参考指南(升级前重新索引)
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • GitUp, 你不可错过的秀外慧中的git工具
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Java编程基础24——递归练习
  • nodejs:开发并发布一个nodejs包
  • 读懂package.json -- 依赖管理
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 通过npm或yarn自动生成vue组件
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • Java数据解析之JSON
  • 从如何停掉 Promise 链说起
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (07)Hive——窗口函数详解
  • (C++17) optional的使用
  • (二)原生js案例之数码时钟计时
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (七)Knockout 创建自定义绑定
  • (四)模仿学习-完成后台管理页面查询
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • 、写入Shellcode到注册表上线
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net6+aspose.words导出word并转pdf
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .skip() 和 .only() 的使用
  • ;号自动换行