这题暴力法很简单,不多赘述。
双指针:
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
为什么使用双指针?
题目给出非递减数组,那就是递增数组呗,只不过有负数区间和正数区间,所以负数->0<-正数。
平方之后每个数都是正数,所以设定两个指针,每次比较两边的数的大小。时间复杂度log(n)。
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[i]*nums[i];
i++;
k--;
}else{
result[k]=nums[j]*nums[j];
j--;
k--;
}
}
return result;
}
};