输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/squares-of-a-sorted-array
思路:
原nums是有序的数组,有负数、0、正数。平方后,最大的数肯定是最左边or最右边,所以我们寻找平方后、从大到小的数,用双指针的方法,从两边开始往中间寻找。
定义一个一样长度的数组result、左指针i = 0、右指针j = len(nums) - 1
循环条件:
当左指针<=右指针时:
如果nums[i]^2 > nums[j]^2, result[k]就是nums[i]^2,从后往前将最大的数填入
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
k = len(nums) - 1
result = [-1]*len(nums)
i = 0
j = len(nums) - 1
while i <= j:
if nums[i]*nums[i] > nums[j]*nums[j]:
result[k] = nums[i]*nums[i]
k = k - 1
i = i + 1
else:
result[k] = nums[j]*nums[j]
k = k - 1
j = j - 1
return result