leetcode 977. 有序数组的平方

一、题目

给你一个按 非递减顺序 排序的整数数组 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;
}
上一篇:Leetcode—977. 有序数组的平方


下一篇:力扣977. 有序数组的平方