示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]
解法1:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int j = 0;
for (int i = 0; i < nums.size(); i++) {
nums[j] = nums[i] * nums[i];
j++;
}
sort(nums.begin(), nums.end());
return nums;
}
};
解法2,
分析:
首先给的数组是有序的, 但是负数平方之后可能会成为最大数,那么数组平方的最大值只能在数组的两端,所以两个指针指向起始和终止进行比较。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1;
vector<int> result(nums.size(), 0);
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;
}
};