题目描述
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
eg
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
题解
使用双指针法,从两边向中间逼近比大小,因为非递减且平方,从大到小排列,大的就存入结果数组,并且指针移动一位直至相遇
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result;
int left=0, right=nums.size()-1;
int k= right;
for(int i=0;i<nums.size();i++)
result.push_back(0);
while(left<=right)
{
int L=nums[left]*nums[left];
int R=nums[right]*nums[right];
if(L<R)
{
result[k--]=R;
right--;
}
else
{
result[k--]=L;
left++;
}
}
return result;
}
};
注意事项
1.本题的时间复杂度要求为O(n),暴力解法直接快排为O(nlogn)