题目

给你一个按 非递减顺序 排序的整数数组 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 <= 10^4
-10^4 <= nums[i] <= 10 ^4
nums 已按 非递减顺序 排序
进阶:
请你设计时间复杂度为 O(n) 的算法解决本问题
来源:力扣(LeetCode)

解题思路

  题目十分的简单,遍历求平方然后排序即可。

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:return sorted([i**2 for i in nums])


  这样做的话是有一个条件没有用上,那就是数组是非递减的。进一步的优化可以在排序算法上,比如当前数组已经基本有序,那么利用插入排序就会有不错的提升,但是这样仍然达不到进阶的意见。考虑插入排序,有效的操作也只是将负数的平方一个个插入有序的正数序列中,但其实负数序列也是非递减的,所以负数序列和正数序列是两个有序的序列,这样的话就会是两个有序的归并段,两个归并段的排序时间复杂度便会降到O(n)。

class Solution:def sortedSquares(self, nums: List[int]) -> List[int]:if nums[0]>=0:return [i**2 for i in nums]for i in range(len(nums)):if nums[i]>=0:breakx=0y=0temp=[]while x<i and y<len(nums)-i:a=nums[0:i][::-1][x]**2b=nums[i:][y]**2if a>b:temp.append(b)y+=1else:temp.append(a)x+=1if x<i:return temp+[j**2 for j in nums[0:i][::-1][x:]]else:return temp+[j**2 for j in nums[i:][y:]]


  理论上时间复杂度低的话用时应该更短,出现这种情况应该是代码出了一些问题,可能还得进行代码上的优化。

LeetCode简单题之有序数组的平方相关推荐

  1. LeetCode简单题之有序数组中出现次数超过25%的元素

    题目 给你一个非递减的 有序 整数数组,已知这个数组中恰好有一个整数,它的出现次数超过数组元素总数的 25%. 请你找到并返回这个整数 示例: 输入:arr = [1,2,2,6,6,6,6,7,10 ...

  2. [Leetcode][第977题][JAVA][有序数组的平方][排序][双指针]

    [问题描述][简单] [解答思路] 1. 排序 平方后排序 没有使用排序的特性 时间复杂度:O(NlogN) 空间复杂度:O(1) class Solution {public int[] sorte ...

  3. LeetCode每日一题 977. 有序数组的平方

    题目链接 思路 双指针找绝对值最大的,最后反转数组. class Solution {public:vector<int> sortedSquares(vector<int>& ...

  4. LeetCode简单题之检查数组是否经排序和轮转得到

    题目 给你一个数组 nums .nums 的源数组中,所有元素与 nums 相同,但按非递减顺序排列. 如果 nums 能够由源数组轮转若干位置(包括 0 个位置)得到,则返回 true :否则,返回 ...

  5. LeetCode简单题之寻找数组的中心下标

    题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和. 如果中心下标位于数组最左端,那么左侧数之和视为 0 ...

  6. LeetCode简单题之统计数组中峰和谷的数量

    题目 给你一个下标从 0 开始的整数数组 nums .如果两侧距 i 最近的不相等邻居的值均小于 nums[i] ,则下标 i 是 nums 中,某个峰的一部分.类似地,如果两侧距 i 最近的不相等邻 ...

  7. LeetCode(977)——有序数组的平方(JavaScript)

    给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序. 示例: 输入:[-4,-1,0,3,10] 输出:[0,1,9,16,100] 示例: 输入:[-7,- ...

  8. 代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

    目录 一.今日心得感悟 1.数组从小到大排序 ①冒泡法--时间复杂度:O(nlogn) ②使用排序函数qsort--时间复杂度:O(nlogn) ③两端->中间(双指针法) --时间复杂度:O( ...

  9. 代码随想录算法训练营第二天|leetcode 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    leetcode 977.有序数组的平方 想到昨天写的双指针,十分刻意用了一下,感觉还是比较生疏,还得加强练习和思考,然后发现还需要排序,想到了vector的排序sort(),但是觉得直接用不好,也忘 ...

最新文章

  1. struct2 开发环境搭建 问题
  2. 【Linux开发】linux设备驱动归纳总结(十二):简单的数码相框
  3. 光有面罩不是能防护的
  4. Android开发 Intent传递参数,获取数据为null
  5. 服务器点对点直连,点对点网络连接怎么建立有什么作用
  6. echarts迁徙图 vue_【可视化插件】Vue项目中Echarts流向图迁徙图实现
  7. winform-日记
  8. Android Studio百度地图开发所需参数获取SHA1或MD5的最简单方法(图文教程)
  9. GPU Gems1 - 10 电影级的光照
  10. 计算机二级1605错误,word 出现windows installer 1605错误
  11. python智能光环板_学而思编程推出全新智能学习系统,搭配多种硬件
  12. 当时尚遇上AI!港中文MMLab开源MMFashion工具箱
  13. SnapKit 约束创建过程
  14. Node.js nodemn
  15. java ssm基于springboot的设备巡检系统
  16. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量
  17. 计算机系学生的梦想,编写我们的梦想——北大计算机系学生生活掠影-北京大学网络与信息.ppt...
  18. JavaScript swiper
  19. 被final修饰的部分变量后依然可以被修改
  20. 计算机网络 | 网络互联技术与设备

热门文章

  1. 2022-2028年中国科技馆行业研究及前瞻分析报告
  2. 2017 年总结及 2018 年计划
  3. 【Sql Server】DateBase-SQL安全
  4. Spring并发访问的线程安全性问题
  5. TensorFlow多元线性回归实现
  6. 色彩(颜色)空间原理(下)
  7. H.265 HD 和H.265 4K Video Encoder IP Core
  8. 2021年大数据ZooKeeper(三):Zookeeper数据模型和节点类型
  9. 2021年大数据Flink(十一):流批一体API Source
  10. git remote 命令