Leetcode977
1.问题描述
2.解决方案
解法一:朴实无华暴力法 (时间复杂度:O(n+nlogn))
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
nums[i]=nums[i]*nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}
};
解法二:双指针法(时间复杂度:O(nlogn))
我想一看图就大概知道了,就是两头各一个指针,两头的数不管是正的还是负的,平方完绝对是最大的这毋庸置疑吧!所以就不会出现结果集的指针还需要重塑数组的,遍历一遍足够,所以理解了这个,这双指针就没问题了!
class Solution1 {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> ans(nums.size());
int ansP=nums.size()-1;
int left=0;
int right=nums.size()-1;
while(ansP>=0){
if(abs(nums[left])>=abs(nums[right])){
ans[ansP--]=nums[left]*nums[left];
left++;
} else{
ans[ansP--]=nums[right]*nums[right];
right--;
}
}
return ans;
}
};