977. 有序数组的平方
代码实现:
方法一
func sortedSquares(A []int) []int {
// 暴力解法
for k, v := range A {
A[k] = v * v
}
sort.Ints(A)
return A
}
解题思路:暴力求解,按题意求解。
方法二
func sortedSquares(A []int) []int {
res := make([]int, len(A))
for i, k, j := 0, len(A)-1, len(res)-1; i <= j; k-- {
if A[i]*A[i] > A[j]*A[j] {
res[k] = A[i] * A[i]
i++
} else {
res[k] = A[j] * A[j]
j--
}
}
return res
}
解题思路:双指针。这一题由于原数组是有序的,所以要尽量利用这一特点来减少时间复杂度。
最终返回的数组,最后一位,是最大值,这个值应该是由原数组最大值,或者最小值得来的,所以可以从数组的最后一位开始排列最终数组。用 2 个指针分别指向原数组的首尾,分别计算平方值,然后比较两者大小,大的放在最终数组的后面。然后大的一个指针移动。直至两个指针相撞,最终数组就排列完成了。