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

每日一题(LeetCode)----数组--移除元素(五)

每日一题(LeetCode)----数组–移除元素(五)

1.题目([977. 有序数组的平方](https://leetcode.cn/problems/sqrtx/))

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

示例 1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

示例 2:

输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 已按 非递减顺序 排序

进阶:

  • 请你设计时间复杂度为 O(n) 的算法解决本问题

2.解题思路

思路一: 双指针法

通过观察发现正数(包括零)平方后从左向右递增,负数平方后从右向左递增,所以我们先找到第一个不是负数的位置,然后找到最后一个负数的位置,将这组数进行平方操作,并放到一个新创建的vector中,最后从第一个不是负数的位置向左遍历,最后一个负数的位置向右遍历将这两个指针遍历到的数进行比较,然后依次往原有vector中放入排序好的元素注意如果某一指针移至边界了,那么就将另一指针还未遍历到的数依次放入到原有vector中排好序的元素的后面。

思路二: 双指针法

我们可以使用两个指针分别指向位置 0 和 n−1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况,读者可以仔细思考其精髓所在。

原作者:力扣官方题解
链接:https://leetcode.cn/problems/backspace-string-compare/

3.写出代码

思路一的代码:

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int length = nums.size();int poIndex = -1;//找到第一个不是负数的下标for (int i = 0; i < length; i++) {if (nums[i] >= 0) {poIndex = i;break;}}//找到最后一个负数的下标int neIndex;if (poIndex == -1) {neIndex = nums.size()-1;}else {neIndex = poIndex - 1;}//将这组数进行平方操作,并放到一个新创建的vector中vector<int> Temp;for (int i = 0; i < length; i++) {Temp.push_back(nums[i] * nums[i]);}//从中间往两边进行比较,然后依次往原有vector中放入排序好的元素int i = 0;while ((poIndex <=( nums.size() - 1)) && neIndex>=0) {if (Temp[poIndex] > Temp[neIndex]) {nums[i++] = Temp[neIndex--];}else {nums[i++] = Temp[poIndex++];}}while (poIndex <= nums.size() - 1) {nums[i++] = Temp[poIndex++];}while (neIndex >= 0) {nums[i++] = Temp[neIndex--];}return nums;}
};

思路二的代码:

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int n = nums.size();vector<int> ans(n);for (int i = 0, j = n - 1, pos = n - 1; i <= j;) {if (nums[i] * nums[i] > nums[j] * nums[j]) {ans[pos] = nums[i] * nums[i];++i;}else {ans[pos] = nums[j] * nums[j];--j;}--pos;}return ans;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原作者:力扣官方题解
链接:https://leetcode.cn/problems/backspace-string-compare/

相关文章:

  • 无人驾驶智能:两车居然可以“交流”
  • 原型制作神器ProtoPie的使用Unity与网页跨端交互
  • 【开源】基于Vue.js的智能停车场管理系统的设计和实现
  • K8S篇之k8s containerd模式fail to pull image certificate signed by unknown authority
  • 基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】
  • 多状态Dp问题——买卖股票的最佳时机含冷冻期
  • 黑窗口连接远程服务
  • 苹果转移供应链,促中国手机和中国制造更紧密合作,加速技术升级
  • CCNA课程实验-13-PPPoE
  • node插件MongoDB(四)—— 库mongoose 的个性话读取(字段筛选、数据排序、数据截取)(四)
  • django|报错SQLite 3.8.3 or later is required的解决方案
  • 【数据结构】树与二叉树(十):二叉树的先序遍历(非递归算法NPO)
  • cefsharp 93.1.140 如何在js中暴露c#类
  • MySQL的索引和复合索引
  • SpringBoot中required a bean of type ‘java.lang.String‘ that could not be found问题
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Angular 2 DI - IoC DI - 1
  • Angular Elements 及其运作原理
  • CAP 一致性协议及应用解析
  • Druid 在有赞的实践
  • extjs4学习之配置
  • Hibernate【inverse和cascade属性】知识要点
  • Invalidate和postInvalidate的区别
  • Javascript编码规范
  • Median of Two Sorted Arrays
  • oschina
  • Vim 折腾记
  • yii2权限控制rbac之rule详细讲解
  • 计算机常识 - 收藏集 - 掘金
  • 离散点最小(凸)包围边界查找
  • 七牛云假注销小指南
  • 前端js -- this指向总结。
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 我这样减少了26.5M Java内存!
  • Nginx实现动静分离
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​VRRP 虚拟路由冗余协议(华为)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $.ajax()参数及用法
  • (20050108)又读《平凡的世界》
  • (3)(3.5) 遥测无线电区域条例
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (LeetCode 49)Anagrams
  • (二)JAVA使用POI操作excel
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)详解PHP处理密码的几种方式
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布