思路:先找到里面绝对值最小的元素,然后双指针,一个指左边,一个指右边,比较两指针指向的当前元素,哪个小放哪个哪边指针指向下一个元素;最后把剩余没放进的一侧全部放入;
vector<int> sortedSquares(vector<int> &A)
{
int mid = 0;
int len = A.size();
while (mid < len - 1)
{
if (abs(A[mid + 1]) > abs(A[mid]))
{
break;
}
mid++;
}
//此时A[mid]为整个数组中绝对值最小的;
vector<int> res;
int l = mid, r = mid + 1;
while (l >= 0 && r < len)
{
if (abs(A[l]) > abs(A[r]))
{
res.push_back(pow(A[r], 2));
r++;
}
else
{
res.push_back(pow(A[l], 2));
l--;
}
}
while (l >= 0)
{
res.push_back(pow(A[l], 2));
l--;
}
while (r < len)
{
res.push_back(pow(A[r], 2));
r++;
}
return res;
}