题目:给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
【方法一:直接使用排序函数】
方法解析:将数组元素平方,再应用python排序函数进行排序
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
for i in range(len(nums)):
nums[i] *= nums[i]
nums.sort()
return nums
【方法二:双指针】
方法解析:由于数组是非递减数组,即数组元素平方后最大值在数组两端或者在数字组的一端。
1. 将一个指针指向数组开头left=0,一个指针指向数组的末尾right= len(nums) -1;
2. 另外再定义一个数组存放新的数组,循环比较数组前端的数据和后端数据的大小,将大的数据从新数组的后端放入,直到将新数组放满/全部比较完
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
if len(nums) == 1:
nums[0] *= nums[0]
return nums
left = 0
right = len(nums) - 1
ret = len(nums) - 1
num = [-1] * len(nums)
for i in range(len(nums)):
nums[i] *= nums[i]
# nums.sort()
# return nums
while ret >= 0:
if nums[left] < nums[right]:
num[ret] = nums[right]
right -= 1
else:
num[ret] = nums[left]
left += 1
ret -= 1
return num