数组 - 有序数组的平方
本题以力扣上的977号题目为例,大概就是给定一个有序序列,存在负数,将序列中各个元素的平方后进行升序输出。
当两个元素的平方相等时,顺序不管。
最开始我的想法是
但其实这种想法不太成立,当遇到
[-5, -4, -3, -2, -1]这种序列,得出的结果就不对。
其实题目给的有序序列元素平方后,有一个特点,就是最大值一定是在两边。所以我们通过比较左右两边的就可以得出谁是最大值,继而不断向中间收缩范围。
找到最大值就往新定义的数组中插入,是从最后开始插入
func sortedSquares(nums []int) []int {
// 全部元素取平方并存入
res := make([]int, len(nums))
index := len(nums) - 1
i := 0
j := len(nums)-1
for i <= j { // 这里是小于等于,如果忽略等于,就会少考虑一种情况
if nums[i] * nums[i] > nums[j] * nums[j] {
res[index] = nums[i] * nums[i]
index--
i++
} else {
res[index] = nums[j] * nums[j]
index--
j--
}
}
return res
}