题目给了非递减数组,要求平方后排序为非递减数组。
思路:新建数组ret,对ret进行填充,可以从大开始填充,也可以从小开始填充,
经过观察发现,题目给的数组两头平方后大,中间小。从两头开始,选择较大的数进行填充,方便初始化!得出对撞指针。
对撞过程如下:
初始化:遍历数组,对元素平方
s=0,f=nums.size()-1;
循环体:填充ret数组,择大进行填充,同时移动指针
结束条件:s>f;
代码如下
class Solution { public: vector<int> sortedSquares(vector<int>& nums) { vector<int> ret(nums.size(),0); int s=0,f=nums.size()-1; for(int k=0;k<nums.size();k++){ nums[k]=nums[k]*nums[k]; } for(int k=f;s<=f;k--){ ret[k]=nums[s]<nums[f]?nums[f--]:nums[s++]; } return ret; } };