Idea: Primero encuentre el elemento con el valor absoluto más pequeño en él, luego punteros dobles, uno a la izquierda y otro a la derecha, compare el elemento actual al que apuntan los dos punteros y coloque qué puntero apunta al siguiente elemento; finalmente coloque el resto no en Pon todo de un lado;
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;
}