第一种:暴力解法:直接用平方后的数据更新数组内容,然后一个快速排序即可。
第二种:双指针法:因为数组本来就是有序的,因此平方之后最大的数据只能在原数组的头和尾出现,因此设置两个指针分别指向数组头和尾,每次分别比较两个平方后的数据即可,将较大的数存放入一个新数组中即可。
class Solution_1 {
vector<int> sortedSquares(vector<int> &nums) {
// 暴力解法,对每个元素平方之后进行排序
for (int i = 0; i < nums.size(); i++) {
nums[i] *= nums[i];
}
sort(nums.begin(), nums.end());
return nums;
}
};
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
// 双指针法 因为数组原本就是有序的,那么平方后最大的数据只可能数组的两端,分别定义头、尾指针
// 定义一个结果集results来存放平方后的数据
int i = 0, j = nums.size()-1;
vector<int> result(nums.size(),0);
int k = j;
while (i <= j) {
if ( (nums[i] * nums[i]) > (nums[j] * nums[j]) ) {
result[k--] = nums[i] * nums[i];
i++;
}
else {
result[k--] = nums[j] * nums[j];
j--;
}
}
return result;
}
};