题目
给你一个按 非递减顺序 排序的整数数组 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 left = 0, right = nums.size() - 1, i = nums.size() - 1;
vector<int> res(nums.size());
while (left <= right) {
if (abs(nums[left]) >= abs(nums[right])){
res[i] = nums[left] * nums[left];
left ++;
}
else {
res[i] = nums[right] * nums[right];
right --;
}
i--;
}
return res;
}
};