LeetCode 977. 有序数组的平方

codechangeworld-go / 2023-05-05 / 原文

题目链接 :LeetCode 977. 有序数组的平方

  1. 本题直接暴力求解就是先求出每个元素平方后的值,再对平方后的值进行排序,
  2. 双指针解法
    由于数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
    定义一个新数组res,和nums数组一样的大小,让k指向res数组末尾位置。如果nums[i] * nums[i] < nums[j] * nums[j] 那么res[k--] = nums[j] * nums[j]; 如果nums[i] * nums[i] >= nums[j] * nums[j] 那么res[k--] = nums[i] * nums[i];
    代码如下:
func sortedSquares(nums []int) []int {
    n:=len(nums)
    res:=make([]int,n)
    i,j,k:=0,n-1,n-1
    for i <= j {
        if nums[i] * nums[i] > nums[j] * nums[j]{
            res[k] = nums[i] * nums[i]
            i++
        }else{
            res[k] = nums[j] * nums[j]
            j--
        }
        k--
    }
    return res

}