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
ToTOP