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

力扣977.有序数组的平方(双指针)

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

方法一:直接将每个元素的平方压入ans数组中,再对ans数组进行排序

class Solution 
{
public:vector<int> sortedSquares(vector<int>& nums) {vector<int>ans;for(int x:nums){ans.emplace_back(x*x);}sort(ans.begin(),ans.end());return ans;}
};

方法二:双指针

题目给我们的数组是一个非递减的数组,那么我们可以利用好这个条件减小时间复杂度。

操作方法如下:由于是非递减数组,并且其中可能有负数,那么平方后最大的两个数只有可能是第一个(即负数中最小的那个)和最后一个(即正数中最大的那个)。我们可以想到双指针,一个从前往后,一个从后往前,分别比较指向元素平方后的大小。然后给一个位置指针k,标记要存入的位置。比较后我们将较大的元素存到k这个位置,然后k自减,指向平方后较大的元素的指针就移动一位,重复上述过程

class Solution 
{
public:vector<int> sortedSquares(vector<int>& nums) {vector<int>ans(nums.size(),0);int k=nums.size()-1;int i=0,j=k;while(i<=j)//要取等,否则若有奇数个元素,中间那个会没有处理{if(nums[i]*nums[i]<nums[j]*nums[j]){ans[k--]=nums[j]*nums[j];j--;}else{ans[k--]=nums[i]*nums[i];i++;}}return ans;}
};

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

相关文章:

  • QT——文件IO
  • 分布式中间件:Redis介绍
  • 服务器和本地电脑之间如何传输文件
  • 经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
  • 嵌入式学习前要了解的基础知识
  • RTC、直播、点播技术对比|腾讯云/即构/声网如何选型 — 2025 版
  • 《白帽子讲 Web 安全》之文件操作安全
  • yolov8训练模型、测试视频
  • 03.网络编程套接字(二)
  • 一周学会Flask3 Python Web开发-Flask3之表单处理WTForms安装与定义WTForms表单类
  • Git基本命令索引
  • 【论文阅读笔记】SL-YOLO(2025/1/13) | 小目标检测 | HEPAN、C2fDCB轻量化模块
  • MySQL SQL 优化专题
  • Mac上安装Pycharm
  • flask框架基础入门学习教程
  • Qt显示一个hello world
  • MySQL快速搭建主从复制
  • 力扣-动态规划-674 最长连续递增序列
  • 在笔记本电脑上用DeepSeek搭建个人知识库
  • leetcode 94. 二叉树的中序遍历
  • YOLOv12:目标检测新时代的破局者
  • 基于OFDR的层压陆相页岩油储层中非对称裂缝群传播的分布式光纤监测
  • Linux虚拟机网络配置-桥接网络配置
  • 软开经验总结
  • 关于虚拟环境中遇到的bug
  • C 语言在微软平台:经典与创新的交融
  • 大数据测试中,数据仓库表类型有哪些?
  • 基于开源库编写MQTT通讯
  • Kafka Connect连接器的全生命周期:
  • 磁盘空间不足|如何安全清理以释放磁盘空间(开源+节流)