leetcoad链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array/
视频链接:https://www.algomooc.com/582.html
方法一:暴力解法
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
nums2=[]
for i in range(len(nums)):
nums2.append(nums[i] *nums[i])
nums2.sort()
return nums2
简单写法:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
return sorted(num * num for num in nums)
方法二:参考合并两个数组的解法
重要思路:数组平方的最大值,不是在最左边,就是在最右边不可能是中间的数
我们设置两个索引,分别指向数组的两端,比如 left 指向起始位置,right 指向终止位置。
同时在设置一个新数组 result 用来存放最终的输出结果,让 index 指向 result 数组的终止位置。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
#result=list(range(len(nums)))
result = [0] *len(nums)
i,j = 0,len(nums)-1
index = len(nums)-1
while j >=i:
if nums[i] *nums[i] >= nums[j] *nums[j]:
result[index] = nums[i] * nums[i]
i +=1
index -=1
else:
result[index] = nums[j] * nums[j]
j -=1
index -=1
return result