解法一:暴力解法
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
for (int i = 0; i < A.size(); i++) {
A[i] *= A[i];
}
sort(A.begin(), A.end()); // 快速排序
return A;
}
};
时间复杂度O(nlogn)
解法二:双指针法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(),0);
int index1 = 0;
int index2 = nums.size() - 1;
int index3 = nums.size() - 1;
while (index1 <= index2) {
if (nums[index1] * nums[index1] <= nums[index2] * nums[index2]) {
result[index3--] = nums[index2] * nums[index2];
index2--;
}
else {
result[index3--] = nums[index1] * nums[index1];
index1++;
}
}
return result;
}
};
时间复杂度O(n)
因为给的数组本就是有序的,平方后最大值一定在两端,所以就从两端想中间遍历。