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

leetcode977. 有序数组的平方

题目描述

给你一个按 非递减顺序 排序的整数数组 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) 的算法解决本问题

分析思路

这道题是一道简单题,考虑用O(n)的算法进行求解,需要使用到双指针,在数组的两头分别定义一个指针i和指针j,在一次for循环里进行移动,代码如下

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int i = 0;int j = nums.size() - 1;vector<int> res(nums.size()); // 定义一个同等长度的数组for(int k=j; k>=0; k--){if(nums[j] * nums[j] < nums[i] * nums[i]){ // 如果i指向的值平方大res[k] = nums[i] * nums[i]; // res[k]等于这个num[i]的平方i++; // 指针i向右移动}else{res[k] = nums[j] * nums[j];j--; // 指针j向左移动}}return res;}
};

也可以写成这种形式,或者中间的for变成while(i<=j),

class Solution {
public:vector<int> sortedSquares(vector<int>& nums) {int k = nums.size()-1;vector<int> res(nums.size()); // 定义一个同等长度的数组for(int i=0,j=nums.size()-1;i<=j;){ // 这里也可以替换成while(i<=j)if(nums[j] * nums[j] < nums[i] * nums[i]){ // 如果i指向的值平方大res[k--] = nums[i] * nums[i]; // 先用k下标赋值,然后k--i++; // 指针i向右移动}else{res[k--] = nums[j] * nums[j]; // 先用k下标赋值,然后k--j--; // 指针j向左移动}}return res;}
};

另外,补充一个python版本的代码,也是双指针的方法

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:i = 0j = len(nums) - 1pos = len(nums) - 1res = [0] * len(nums) # python里这样初始化定义全0数组while i<=j:if nums[i] ** 2 > nums[j] ** 2:res[pos] = nums[i] ** 2i += 1else:res[pos] = nums[j] ** 2j -= 1pos -=1return res

相关文章:

  • springBoot整合task
  • 【STL】手撕 string类
  • llama.cpp部署通义千问Qwen-14B
  • 五分钟带你看完黑客设备
  • WPF窗口样式的比较
  • Chrome显示分享按钮
  • 如何解决谷歌浏览器无法更新、谷歌翻译无法使用问题
  • JavaSE基础50题:7. 写一个方法返回参数二进制中1的个数(3种方法!)
  • go自定义端口监听停用-------解决端口被占用的问题
  • Vue3 setup语法糖
  • 用Java写一个王者荣耀游戏
  • 用C++和python混合编写数据采集程序?
  • 【1day】华天软件 OAworkFlowService接口SQL注入漏洞学习
  • 基于英特尔平台及OpenVINO2023工具套件优化文生图任务
  • MongoDB的原子性和多文档事务处理
  • ES6指北【2】—— 箭头函数
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【刷算法】求1+2+3+...+n
  • 03Go 类型总结
  • Android单元测试 - 几个重要问题
  • Create React App 使用
  • Flannel解读
  • JavaScript创建对象的四种方式
  • Meteor的表单提交:Form
  • nodejs实现webservice问题总结
  • ReactNative开发常用的三方模块
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 从0实现一个tiny react(三)生命周期
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 翻译:Hystrix - How To Use
  • 服务器之间,相同帐号,实现免密钥登录
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 区块链分支循环
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一道闭包题引发的思考
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​ssh免密码登录设置及问题总结
  • ​人工智能书单(数学基础篇)
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #define,static,const,三种常量的区别
  • #etcd#安装时出错
  • #Spring-boot高级
  • #单片机(TB6600驱动42步进电机)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (30)数组元素和与数字和的绝对差
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (二)springcloud实战之config配置中心
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (九十四)函数和二维数组