0%

977. squares-of-a-sorted-array

有序数组的平方

题目

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例 1:

  • 输入:nums = [-4,-1,0,3,10]
  • 输出:[0,1,9,16,100]
  • 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]

示例 2:

  • 输入:nums = [-7,-3,2,3,11]
  • 输出:[4,9,9,49,121]

题目链接

思路

  1. 暴力,平方再sort
  2. 对向指针数组的最值出现在两侧,创建一个新数组存储

    解题

    1
    2
    3
    4
    5
    6
    # 暴力
    # python version
    # 时间复杂度O(n+logn)
    class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
    return sorted(x*x for x in nums)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 对向指针
// 时间复杂度O(n)
// 空间复杂度O(n)
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> res(nums.size(),0);
int k = nums.size() -1;
for(int i =0,j = k;i<=j;){
if(nums[i] *nums[i] < nums[j]*nums[j]){
res[k--] = nums[j]*nums[j];
j--;
}else{
res[k--] = nums[i] *nums[i];
i++;
}
}
return res;
}
};

Refs

代码随想录