方法一:
暴力方法。先将每个元素变成平方,然后排序。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for (int i = 0; i < nums.size(); i++) {
nums[i] = nums[i] * nums[i];
}
sort(nums.begin(), nums.end());
return nums;
}
};
方法二:
利用双指针。因为平方大的数一定绝对值大,所以会出现在数组两边,所以从两边向中间进行处理,将平方值更大的放入结果数组尾端。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left = 0;
int right = nums.size() - 1;
vector<int> res(nums.size());
int pos = nums.size() - 1;
while (left <= right && pos >= 0) {
if (nums[left] * nums[left] < nums[right] * nums[right]) {
res[pos--] = nums[right] * nums[right];
right--;
} else {
res[pos--] = nums[left] * nums[left];
left++;
}
}
return res;
}
};