Leetcode 977:有序数组的平方(超详细的解法!!!)
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
1
2
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
1
2
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。
解题思路
使用暴力破解,先求所有数的平方然后对求得的数进行排序。
class Solution:
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
return sorted([i**2 for i in A])
1
2
3
4
5
6
7
这种做法的时间复杂度是O(nlogn),我们还有一种更快的做法。通过建立左右两个指针,然后比较左右两个指针所指向的值的绝对值那个更大,更大的那个显然就应该放到后面,然后接着比较即可。
class Solution:
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
i, j = 0, len(A)-1
res = [0]*len(A)
for k in range(len(A)-1, -1, -1):
if abs(A[i]) < abs(A[j]):
res[k] = A[j]**2
j -= 1
else:
res[k] = A[i]**2
i += 1
k -= 1
return res
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
徐然这种做法的时间复杂度是O(n),但是实际测试的时候并没有快上很多。
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!
---------------------
作者:coordinate_blog
来源:CSDN
原文:https://blog.csdn.net/qq_17550379/article/details/86563977
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号