有序数组的平方
2023-12-29 22:36:52
给你一个按?非递减顺序?排序的整数数组?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)
?的算法解决本问题
1. 暴力法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for (int i = 0; i < nums.size(); i++) {
nums[i] = nums[i] * nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}
};
2. 双指针
可以发现数组本身就是有序的,但是平方之后可能会无序,因为负数平方之后变成了正数,那么最大值还是只可能在最前面和最后面取到,我们可以定义两个指针,一个从前一个从后开始,比较大小,平方之后更大的加入到新数组的,注意,新数组是空数组,我们从后往前加,就不用最后再排序了。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> res(nums.size(),0);
int k = nums.size()-1;
for(int first = 0,last = nums.size()-1;first<=last;){
if(nums[first]*nums[first] < nums[last]*nums[last]){
res[k--] = nums[last]*nums[last];
last--;
}else{
res[k--] = nums[first]*nums[first];
first++;
}
}
return res;
}
};
文章来源:https://blog.csdn.net/L6666688888/article/details/135298779
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!