给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1
先行计算各数字平方后排序
class Solution(object):
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
result=[i*i for i in A]
return sorted(result)
执行结果:
通过
显示详情
执行用时 :236 ms, 在所有 Python 提交中击败了46.83%的用户
内存消耗 :14.8 MB, 在所有 Python 提交中击败了100.00%的用户
思路2
双指针法,j最初指向列表中非负数值最小值,随着j增大,A[j]的平方逐渐增大;i最初指向列表中负数最大值(也就是负数绝对值最小值),随着i减小,A[i]的平方逐渐增大;分别比较A[i]与A[j]的平方值并移动相应指针完成操作
class Solution(object):
def sortedSquares(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
j=0
while j<len(A) and A[j]<0:
j+=1
i=j-1
res=[]
while i>=0 and j<len(A):
if A[i]**2<A[j]**2:
res.append(A[i]**2)
i-=1
else:
res.append(A[j]**2)
j+=1
while i>=0:
res.append(A[i]**2)
i-=1
while j<len(A):
res.append(A[j]**2)
j+=1
return res