977、有序数组的平方
1)题目描述
给你一个按 非递减顺序 排序的整数数组 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
已按 非递减顺序 排序
2)分析
使用双指针遍历,可以直接在计算完成就对结果完成了排序,只需要遍历nums
一次,时间复杂度O(n)
。
双指针分别从nums
数组的两端开始向中间移动,每次计算比较两端元素平方的大小,将大的逆序放进结果中,并将这一端的指针向中间移动一次,直到两指针相遇为止。
3)C++
代码
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> res(nums.size(),0);
int k=nums.size()-1;
for(int i=0,j=nums.size()-1;i<=j;){
if(nums[i]*nums[i]<nums[j]*nums[j]){
res[k]=nums[j]*nums[j];
k--;
j--;
}
else{
res[k]=nums[i]*nums[i];
k--;
i++;
}
}
return res;
}
};