题目:点我捏
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k=nums.size()-1;
vector<int> tnum(k+1,0);
int f=0;//指向前面指针
int b=nums.size()-1;//指向后面指针
while(f!=b){
if(nums[f]*nums[f]>=nums[b]*nums[b]){
tnum[k]=nums[f]*nums[f];
k--;
f++;
}else{
tnum[k]=nums[b]*nums[b];
k--;
b--;
}
}
tnum[k]=nums[b]*nums[b];
return tnum;
}
};
利用双指针
开平方之后的数据一定是前面或者后面大,所以我们直接进行比较,找出最大值,放入新建数组的后方,f代表指向数组前面的指针,b代表后面的指针,大的数插入新建数组,并且移动指针,进行后续比较