暴力题解是先平方,得到新数组后,用
sort(A.begin(), A.end()); // 快速排序
这样一个东西实现快速排序。
另一种方法是双指针,没错又是双指针,看来真的是一种很有效的手段。利用平方后较大的数一定是在原数组两端的特性,用两个指针在原数组两端向中间运动,新数组取较大平方数,然后指针移动,直到两指针汇聚。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(), 0);
int k = nums.size() - 1;
for (int i = 0, j = nums.size() - 1; i <= j; ){
if (nums[i]*nums[i] < nums[j]*nums[j]){
result[k--] = nums[j] * nums[j];
j--;
}
else {
result[k--] = nums[i] * nums[i];
i++;
}
}
return result;
}
};