问题描述: 给你一个按 非递减顺序 排序的整数数组 nums,要求返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。【题目来源:leetcode】
实例:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
解法一:
算法思想:简单粗暴,利用python内置的排序函数+列表解析
时间复杂度:O(nlogn)
空间复杂度:O(logn)
def sortedSquares(nums):
return sorted(num * num for num in nums)
解法二:
算法思想:双指针法,利用原数组按非递减顺序排序,我们设置两个指针变量分别指向原列表的头( i )和尾( j ),再设置一个pos指针指向待插入列表的尾部。每次比较 i 位置和 j 位置的数平方的大小,大的插入待插入列表的尾部并将pos指针向前移动。
时间复杂度:O(n)
空间复杂度:O(1)
def sortedSquares(nums):
# 双指针法
n = len(nums)
result = [0] * n
i, j, pos = 0, n - 1, n - 1
while i <= j:
if nums[i] * nums[i] > nums[j] * nums[j]:
result[pos] = nums[i] * nums[i]
i += 1
else:
result[pos] = nums[j] * nums[j]
j -= 1
pos -= 1
return result