题目:给你一个按 非递减顺序 排序的整数数组 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

文章介绍了如何对一个非递减顺序的整数数组进行平方并保持排序的方法。方法一是直接平方所有元素后使用内置排序函数,方法二是采用双指针技巧,从数组两端同时向中间处理,避免了额外的排序步骤。这两种方法都确保了结果数组的非递减顺序。
553

被折叠的 条评论
为什么被折叠?



