アイデア:最初に絶対値が最小の要素を見つけ、次に左と右の2つのポインターを見つけ、2つのポインターが指す現在の要素を比較し、次の要素を指すポインターを配置します。最後に残りを配置しません。すべてを片側に置きます。
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;
}