977.有序数组的平方
题目描述:给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
解答:
法一:直接进行暴力法。先平方,再快排。
代码实现:
#include<algorithm>
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for (int i = 0; i<size(nums); i++){
nums[i] = nums[i]*nums[i];
}
sort(nums.begin(), nums.begin()+size(nums), less<int>());
return nums;
}
};
法二:双指针法。从头到尾遍历一遍即可。因为数组有序,平方后最大值只有可能从两边出现。左指针指向开头,右指针指向结尾,平方后比较大小,大的放入result,移动位置,接着进行比较,直到result数组放满(或者左右指针错开)为止。
代码实现:
#include<algorithm>
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int leftIndex = 0, length = size(nums);
int rigthIndex = length-1;
vector<int> result(length, 0);//记录结果的数组
for (int location = length-1; location >= 0; location--){
if(pow(nums[leftIndex], 2) > pow(nums[rigthIndex], 2)){
result[location] = pow(nums[leftIndex], 2);
leftIndex++;
}
else{
result[location] = pow(nums[rigthIndex], 2);
rigthIndex--;
}
}
return result;
}
};