一、题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
二、解法
一种简单思路是,先算出新数组,然后排序,时间复杂度是O(n+nlogn)。
要利用非递减顺序这一条件,考虑到数组的最大值要么是最左边,要么是最右边,用双指针。
func sortedSquares(nums []int) []int {
len:=len(nums)
ans:=make([]int,len)
low,high,k:=0,len-1,len-1
for low<=high{
if l,h:=nums[low]*nums[low],nums[high]*nums[high];l>=h{
ans[k]=l
low++
}else{
ans[k]=h
high--
}
k--
}
return ans;
}