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

力扣刷题977——有序数组的平方

977. 有序数组的平方

题目:

给你一个按 非递减顺序 排序的整数数组 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]

出版作答(python3):

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:nums_sq=[]n=0for i in nums:j=i*inums_sq.append(j)n = len(nums_sq)for i in range(n):for j in range(0, n - i - 1):if nums_sq[j] > nums_sq[j + 1]:nums_sq[j], nums_sq[j + 1] = nums_sq[j + 1], nums_sq[j]return nums_sq

提交的时候超出时间限制。先平方,之后采用手动的冒泡排序,超时。

第二版:

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:nums_sq=[]n=0for i in nums:j=i*inums_sq.append(j)nums_sq.sort()return nums_sq

题目允许调用函数,可以不手写排序,节省时间。

最优版:

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:n = len(nums)result = [0] * nleft, right = 0, n - 1pos = n - 1while left <= right:if abs(nums[left]) > abs(nums[right]):result[pos] = nums[left] ** 2left += 1else:result[pos] = nums[right] ** 2right -= 1pos -= 1return result

双指针法:
双指针从两端找平方最大值,逆序填入新数组。
1、为何逆序插入?
我们从数组两端找最大平方值,大的数应该放在结果数组的最后面,所以我们需要从后往前插入。
最大平方值一定出现在原数组的两端。设置双指针从两端开始比较
创建一个结果数组 result,长度相同,全部初始化为 0。—>result=[0]*n

大致思路:
比较两端绝对值大小:
谁的绝对值大,说明平方后也更大;
将较大的平方放入结果数组的最后一个位置;
创建左右指针:left 指向最左,right 指向最右;移动对应指针(左边大就 left += 1,右边大就 right -= 1);
重复上述过程,直到左右指针相遇。

http://www.dtcms.com/a/303401.html

相关文章:

  • 热门JavaScript库“is“等软件包遭npm供应链攻击植入后门
  • “菜鸟的java代码日记“ DAY3——跳跃游戏(中等)
  • DBAPI的SQL实现模糊查询的3种方案
  • [论文阅读] 人工智能 | 机器学习工作流的“救星”:数据虚拟化服务如何解决数据管理难题?
  • 数据结构面经
  • 《中国棒球》cba球队有哪些球队·棒球1号位
  • MySQL 查询重复数据的方式总结
  • 历史版本vscode的下载地址
  • 从黑客松出发,AI + Web3 项目怎么打磨成产品?
  • vue2中实现leader-line-vue连线文章对应字符
  • 事务实现的底层原理
  • SwinTransformer改进(14):集成MLCA注意力机制的Swin Transformer模型
  • 机器学习基础-numpy
  • 【JavaScript】const 定义的对象禁止修改内部属性
  • USRP X410 X440 5G及未来通信技术的非地面网络(NTN)
  • Windows10镜像下载
  • 策略路由—PBR
  • laravel chunkById导出数据乱序问题
  • 软件工程:阿里巴巴Java编程手册
  • CCCS作为主要起草人参与《信息技术 智能语音交互系统 第3部分:智能客服》国家标准修订
  • 阿里云 【免费试用】MCP 赋能可视化 OLAP 智能体应用
  • 『 C++ 入门到放弃 』- 哈希表
  • 微积分 | dx / dy 不是比率吗?
  • 《C++继承详解:从入门到理解公有、私有与保护继承》
  • ffmpeg-7.1.1 下载安装 windows 版,MP4 转 m3u8 切片,遇到报错 Unrecognized option ‘vbsf‘的解决办法
  • Linux:理解操作系统
  • 数据结构(动态数组)
  • PyTorch中flatten()函数详解以及与view()和 reshape()的对比和实战代码示例
  • DevOps时代的知识治理革命:Wiki如何成为研发效能的新引擎
  • GPT Agent与Comet AI Aent浏览器对比横评