首页 > 编程语言 >算法入门--有序数组的平方

算法入门--有序数组的平方

时间:2023-01-28 10:57:06浏览次数:39  
标签:平方 入门 nums -- 16 int vector ans

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的代码:

 1 class Solution {
 2 public:
 3     vector<int> sortedSquares(vector<int>& nums) {
 4 for(vector<int>::iterator it=nums.begin();it!=nums.end();it++)
 5 {
 6    *it=(*it)*(*it);
 7 }
 8 sort(nums.begin(),nums.end());
 9 return nums;
10     }
11 };

但是官方写了三种

方法一:直接排序

思路与算法

最简单的方法就是将数组 numsnums 中的数平方后直接排序。

 1 class Solution {
 2 public:
 3     vector<int> sortedSquares(vector<int>& nums) {
 4         vector<int> ans;
 5         for (int num: nums) {
 6             ans.push_back(num * num);
 7         }
 8         sort(ans.begin(), ans.end());
 9         return ans;
10     }
11 };
12 
13 作者:LeetCode-Solution
14 链接:https://leetcode.cn/problems/squares-of-a-sorted-array/solution/you-xu-shu-zu-de-ping-fang-by-leetcode-solution/
15 来源:力扣(LeetCode)
16 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

方法二:

 1 class Solution {
 2 public:
 3     vector<int> sortedSquares(vector<int>& nums) {
 4         int n = nums.size();
 5         int negative = -1;
 6         for (int i = 0; i < n; ++i) {
 7             if (nums[i] < 0) {
 8                 negative = i;
 9             } else {
10                 break;
11             }
12         }
13 
14         vector<int> ans;
15         int i = negative, j = negative + 1;
16         while (i >= 0 || j < n) {
17             if (i < 0) {
18                 ans.push_back(nums[j] * nums[j]);
19                 ++j;
20             }
21             else if (j == n) {
22                 ans.push_back(nums[i] * nums[i]);
23                 --i;
24             }
25             else if (nums[i] * nums[i] < nums[j] * nums[j]) {
26                 ans.push_back(nums[i] * nums[i]);
27                 --i;
28             }
29             else {
30                 ans.push_back(nums[j] * nums[j]);
31                 ++j;
32             }
33         }
34 
35         return ans;
36     }
37 };

方法三:

 1 class Solution {
 2 public:
 3     vector<int> sortedSquares(vector<int>& nums) {
 4         int n = nums.size();
 5         vector<int> ans(n);
 6         for (int i = 0, j = n - 1, pos = n - 1; i <= j;) {
 7             if (nums[i] * nums[i] > nums[j] * nums[j]) {
 8                 ans[pos] = nums[i] * nums[i];
 9                 ++i;
10             }
11             else {
12                 ans[pos] = nums[j] * nums[j];
13                 --j;
14             }
15             --pos;
16         }
17         return ans;
18     }
19 };

 

标签:平方,入门,nums,--,16,int,vector,ans
From: https://www.cnblogs.com/daitu66/p/17069821.html

相关文章

  • MySQL 索引的缺陷和注意事项
    一、索引存在的缺陷1.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE;因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件2.......
  • linux基础设置
    1、修改主机hostnamevi/etc/hostname修改hostsvi/etc/hosts192.168.10.201cdh201192.168.10.202cdh202192.168.10.203cdh203192.168.10.204cdh204重启电......
  • grep 如何解决匹配前后的字符
    grep如何解决匹配前后的字符echo"45645645645aaa45645646"|grep-o-P'.{0,3}aaa.{0,4}'645aaa4564前3个字符,后4个字符  哪些目录安装了anaconda3 loca......
  • 算法提高课
    在nn个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问AA最少需要多少钱......
  • hdu:Shape of HDU(判断多边形凹凸)
    ProblemDescription话说上回讲到海东集团推选老总的事情,最终的结果是XHD以微弱优势当选,从此以后,“徐队”的称呼逐渐被“徐总”所取代,海东集团(HDU)也算是名副其实了。创业......
  • Codeforces Round #847 (Div. 3)
    E.VladandaPairofNumbers题目抽象为给\(n\)\((1\len\le2^{29})\),求\(x\)满足\((n-x)\oplus(n+x)=n\),输出\(n-x\)和\(n+x\)。显然\(n\)为奇数肯定不行......
  • 类是如何加载的?
    在Java中,类加载的流程有一个专门的机制叫做“类加载机制”。类加载机制是指一个类在Java虚拟机(JVM)中的执行流程,它也是Java程序能够正常执行的关键所在,那它的具体执行......
  • 使用OpenAI的Whisper 模型进行语音识别
    语音识别是人工智能中的一个领域,它允许计算机理解人类语音并将其转换为文本。该技术用于Alexa和各种聊天机器人应用程序等设备。而我们最常见的就是语音转录,语音转录可以......
  • 15种经典机器学习算法[转]
      15种经典机器学习算法[转] 算法训练方式线性回归监督学习逻辑回归监督学习线性判别分析监督学习决策树监督学习朴素贝叶斯监督学习K邻......
  • 2 System Calls Using Go
    Theoperatingsystemprovidesalotofwaysforapplicationstoextractinformationandperformoperations.Youwilllookatthedifferentwaystoextractsys......