给你一个按 非递减顺序 排序的整数数组 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) 的算法解决本问题
思路:平方排序,由于输入的数组是排序后的但是有负数存在,负数一平方可能就比后面的正数的平方要大,因此可以使用两个指针,一个从前往后,一个从后往前。比较平方数的大小,将大的先放进去,最后在将容器倒置即可。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int i=0,j=nums.size()-1;
vector<int> result;
long long a,b;
while(i<=j)
{
a=nums[i]*nums[i];
b=nums[j]*nums[j];
if(a>b)
{
result.push_back(a);
i++;
continue;
}else
{
result.push_back(b);
j--;
continue;
}
}
reverse(result.begin(), result.end()); //倒置
return result;
}
};