1.暴力排序
时间复杂度为O(nlogn)
class Solution{
public:
vector<int>sortedSquares(vector<int>&nums)
{
vector<int> ans;
for(int num:nums)
{
ans.push_back(num*num);
}
sort(ans.begin(),ans.end());
return ans;
}
};
2.双指针
最常见的双指针算法有两种:
一种是,在一个序列里边,用两个指针维护一段区间
另一种是,在两个序列里边,一个指针指向其中一个序列,另外一个指针指向另外一个序列,来维护某种次序
双指针算法的核心思想:
先考虑原问题如何使用朴素的暴力方法解决,再去观察数据是否构成某种单调的特性,就可以使用双指针算法对暴力算法进行优化
class Solution{
public:
vector<int>sortedSquares(vector<int>& A)
{
int k = A.size()-1;
vector<int>result(A.size(),0);
for(int i =0,j=A.size()-1;i<=j;)
{
if(A[i]*A[i]<A[j]*A[j])
{
result[k--]=A[j]*A[j];
j--;
}
else
{
result[k--]=A[i]*A[i];
i++;
}
}
return result;
}
};