1、描述
977给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2、关键字
有序,数组,平方,还有序
3、思路
1、直接平方之后重新排一下,sort函数
2、考虑到原始是升序的,可以分全负数,全正数,找0,然后平方翻转,使用归并
3、直接使用原数组的两端开始比较(左边取负和右边进行比较),大的直接从ans的末尾开始填充,
4、notes
,归并不太会
2、那个for语句不对的地方是应该使用auto & num:nums就好了
5、复杂度
一:
时间:O(nlogn)
空间:O(logN)
二:
时间:O(n)
空间:O(1)
6、code
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
size_t n=nums.size();
/*for(auto num:nums){
num*=num;
}*/
for(int i=0;i<n;++i){
nums[i]*=nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}
};
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
size_t n=nums.size();
vector<int>ans(n);
int left=0,right=n-1;
int i=right;
while(left<=right){ // 这里的等于号不能省
if(-nums[left]>nums[right]){
ans[i]=nums[left]*nums[left];
left++;
}
else{
ans[i]=nums[right]*nums[right];
right--;
}
i--;
}
//sort(nums.begin(),nums.end());
return ans;
}
};