学习安排根据《代码随想录》~977
思路:
一、先平方后用内置函数排序
sort(nums.begin(),nums.end())
时间复杂度:先循环平方 O(n)+内置排序 O(n*log(n))
二、快慢指针
原数组已经按照非递增排序,平方后最大只能出现在头或者尾
用两个指针分别指向两个位置,比较大小。
新建一个容量为nums.size()的数组V,将比较完的元素放进去。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums)
{
int n=nums.size();
vector<int>V(n,0);
int i=0;
int j=n-1;
int k=n-1; //第k个 是n-1
while(i<=j)
{
if(nums[i]*nums[i]<nums[j]*nums[j])
{
V[k--]=nums[j]*nums[j];
j--;
}
else
{
V[k--]=nums[i]*nums[i];
i++;
}
}
return V;
}
};