题目链接 :LeetCode 977. 有序数组的平方
- 本题直接暴力求解就是先求出每个元素平方后的值,再对平方后的值进行排序,
- 双指针解法
由于数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指针法了,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
}
标签:977,平方,nums,--,res,int,数组,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17374397.html