力扣977,题目如下:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按非递减顺序排序。
可以发现平方后的数组有一个特点,就是大的数肯定是在两侧,越往中间值越小,所以我们可以使用双指针,一个指针指向起始点,一个指向末尾,进行比较,大的值赋给新的数组的最后一个数,代码如下``
在这里插入代码片
```class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> ans(nums.size(),0); //C++初始化一个数组
int n=nums.size();
int start=0; //双指针,一个从头开始,一个从尾开始
int end=n-1;
for(int i=0;i<n;i++){
nums[i]=nums[i]*nums[i];
}
int j=n-1;
while(start<=end){
ans[j--]=nums[end]>=nums[start]?nums[end--]:nums[start++];
}
return ans;
}
};