题源: 977. 有序数组的平方
说明:
- 双指针方法:通过设置两个指针,一个在数组的开始(
left
),一个在数组的末尾(right
),我们比较两端的绝对值大小,将较大的值的平方放在结果数组的末尾(由i
控制),然后移动相应的指针。 - 时间复杂度:这种方法只遍历数组一次,因此时间复杂度是 O(n),其中 n 是数组
nums
的长度。 - 空间复杂度:使用了一个额外的数组来存储结果,空间复杂度是 O(n)。
Code
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
vector<int> res(n);
int l = 0, r = n - 1;
for(int i = n - 1;i >= 0;i --){
if(abs(nums[l]) > abs(nums[r])){
res[i] = nums[l] * nums[l];
l ++;
}
else{
res[i] = nums[r] * nums[r];
r --;
}
}
return res;
}
};