每日一题——LeetCode977(有序数组的平方)
题意
难度:简单
给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
1 2 3 4
| 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
|
示例 2:
1 2
| 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
|
方法一:直接排序
思路与算法
元组中数平方后直接排序,因为python中有sorted()函数直接排序。所以python学得好,代码打得少!
代码
1 2 3
| class Solution: def sortedSquares(self, nums: List[int]) -> List[int]: return sorted(num * num for num in nums)
|
方法二:双指针
通过题目件其实我们可以得出,平方以后的最大值肯定出现在两侧,不是左边就是右边(负数的平方为正数) 。首先初始化 left 和 right 指针,新建 res 数组,site 指针指向 res 数组的尾部。
图解如下:
代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution: def sortedSquares(self, nums: List[int]) -> List[int]:
if len(nums) == 1: return [nums[0] * nums[0]]
left = 0 right = len(nums) - 1
res = [-1] * len(nums) site = len(nums) - 1
while left <= right: if nums[left] * nums[left] < nums[right] * nums[right]: res[site] = nums[right] * nums[right] right -= 1 else: res[site] = nums[left] * nums[left] left += 1
site -= 1
return res
|