977. 有序数组的平方

这题比较简单,不过也是有不同的思路去做的,事件原因,我只写了两种思路,别的有时间再补充。

题目

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

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

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

思路

一、我想的是用归并排序里的合并操作——将两个有序数组合并为一个,这里可以将正数和负数分别放在两个数组内,因为数组本身是有序的,所以这一步操作时O(n)的,之后比较两个数组的最小值,一个一个往结果数组里捡就行了,注意正数那边要反转一下。

二、还有一种比较快的是使用对撞指针,从两端开始找比较大的,放到结果数组里,最后把结果数组反转一下就行,注意最后一个值也放到数组里,总体上是思路一的优化版,省去了分成两个数组的功夫,能快1倍左右吧。

题解

思路一

#include<algorithm>
class Solution {public:vector<int> sortedSquares(vector<int>& A) {vector<int> pos,nga;int n = A.size();for(int i=0;i<n;i++){if(A[i]>=0) pos.push_back(A[i]);else nga.push_back(-1*A[i]);}reverse(pos.begin(),pos.end());vector<int> res;for(int i=0;i<n;i++){if(pos.empty()){while(!nga.empty()){int tmp = nga[nga.size()-1];nga.pop_back();res.push_back(tmp*tmp);}break;}if(nga.empty()){while(!pos.empty()){int tmp = pos[pos.size()-1];pos.pop_back();res.push_back(tmp*tmp);}break;}int t1 = pos[pos.size()-1];int t2 = nga[nga.size()-1];if(t1<t2){res.push_back(t1*t1);pos.pop_back();}else{res.push_back(t2*t2);nga.pop_back();}}return res;}
};

思路二

#include<algorithm>
class Solution {public:vector<int> sortedSquares(vector<int>& A) {vector<int> res;int left = 0,right = A.size()-1;while(left<right){int tl = A[left]*A[left];int tr = A[right]*A[right];if(tl>tr){res.push_back(tl);left++;}else{res.push_back(tr);right--;}}res.push_back(A[right]*A[right]);reverse(res.begin(),res.end());return res;}
};

leetcode刷题记录2021年3月22日相关推荐

  1. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  2. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  3. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

  4. LeetCode刷题记录12——232. Implement Queue using Stacks(easy)

    LeetCode刷题记录12--232. Implement Queue using Stacks(easy) 目录 LeetCode刷题记录12--232. Implement Queue usin ...

  5. LeetCode刷题记录11——290. Word Pattern(easy)

    LeetCode刷题记录11--290. Word Pattern(easy) 目录 LeetCode刷题记录11--290. Word Pattern(easy) 题目 语言 思路 源码 后记 题目 ...

  6. LeetCode刷题记录10——434. Number of Segments in a String(easy)

    LeetCode刷题记录10--434. Number of Segments in a String(easy) 目录 LeetCode刷题记录9--434. Number of Segments ...

  7. LeetCode刷题记录9——58. Length of Last Word(easy)

    LeetCode刷题记录9--58. Length of Last Word(easy) 目录 LeetCode刷题记录9--58. Length of Last Word(easy) 题目 语言 思 ...

  8. LeetCode刷题记录8——605. Can Place Flowers(easy)

    LeetCode刷题记录8--605. Can Place Flowers(easy) 目录 LeetCode刷题记录8--605. Can Place Flowers(easy) 题目 语言 思路 ...

  9. LeetCode刷题记录7——824. Goat Latin(easy)

    LeetCode刷题记录7--824. Goat Latin(easy) 目录 LeetCode刷题记录7--824. Goat Latin(easy) 题目 语言 思路 后记 题目 题目需要将一个输 ...

最新文章

  1. 赛迪展望 | 一文了解“2021年中国先进计算产业发展趋势”
  2. 里程碑式的数学证明,攻破著名Erdős猜想中关键障碍
  3. php window.onload,window.onload 触发时机问题
  4. mysql localhost和127.0.0.1的区别
  5. 100个高低压配电知识!网络弱电必备知识~
  6. 故障公告:IIS应用程序池停止工作造成博客站点无法访问
  7. ant design datepicker处理日期范围操作
  8. native关键字(涉及本地方法栈)
  9. iOS 人民币符号与日圆符号的混淆
  10. hadoop、spark、flink集群修改默认ssh端口号
  11. opencv与vs的版本
  12. 拼多多微信登录服务器请求失败,拼多多管理后台登不上怎么回事?有何功能?...
  13. 2021毓英中学高考成绩查询,泉州知名中学2020高考成绩喜报大集合(7.26更新)
  14. 在nvidia的JETSON XACIER NX上面跑通yolov3
  15. Javascript json字符串和数组互转 json格式化html
  16. 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法
  17. JavaScript系列之模板字符串
  18. 《简约至上》——话说简单与明确认识
  19. linux查看硬件使用时间,linux服务器查看硬盘使用时间
  20. wslregisterdistribution failed with error: 0x80070005

热门文章

  1. blackberry的战略_黑莓配置流程
  2. 科学计算机bug,EMUI小助手:计算器百分比计算出bug?真相在这儿!
  3. 局部刷新某个div(重大突破)
  4. Vue 的电商 SKU 表单配置组件
  5. 开源浏览器引擎Webkit引发浏览器格局变化
  6. 计算机启动F1正在准备自动修复,Windows 10:正在准备自动修复
  7. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day24】—— 分布式1
  8. 5G的到来会兴起哪些行业
  9. ngular12版本引入ng-alain报错
  10. EXCEL中转置粘贴成值功能如何设置成热键或鼠标手势?