题目:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
class Solution {
/*
1、vector还是数组呀,直接 insert的话,时间复杂度太低,
2、if(nums[slow] * nums[slow] > nums[fast] * nums[fast])
这句倒是可以直接判断出来最终的顺序,但是输出的数组怎么变成平方,就搞了半天
3、还需要重新定一个数组,作为输出来用
4、感觉很巧妙的,好好细品一下
*/
public:
vector<int> sortedSquares(vector<int>& nums)
{
int slow = 0, fast = nums.size() - 1, pose = nums.size() - 1;
vector<int> res(nums.size());
while (fast >= slow)
{
if(nums[slow] * nums[slow] > nums[fast] * nums[fast])
{
// 这个方法的巧妙之处就在于,重新定义了一个数组存储答案,所以就不用swap了
// 但是就有了 对slow和fast 分别的操作,因此用 while 更合适。
// 不用 swap 注意。 swap(nums[slow], nums[fast]);
res[pose] = nums[slow] * nums[slow];
slow++;
}
else
{
res[pose] = nums[fast] * nums[fast];
fast--;
}
pose--;
}
return res;
}
};