16
社区成员




目录
题目
思路
代码
附录
最小的时间和空间代价合并有序数组
题目
以最小的时间和空间代价合并如下两个数组,并且保证有序
a = [ 2, 5, 7, 9, 0, 0, 0],
b = [ 1, 3, 6],
说明:
1、a 中 0 是无效数据,0的长度与 b 的长度一致
2、a 和 b 都是有序的,从小到大
思路
为不频繁移动数组元素,由于空位/无效位置在末尾,则将逆向对比数组末尾元素,分别移动至末尾位置,且无利用额外空间。
代码
package main
import "fmt"
func main() {
a := []int{2, 5, 7, 9, 0, 0, 0}
b := []int{1, 3, 6}
fmt.Println("hello https://tool.lu/", Asc(a, b))
}
func Asc(a, b []int) []int {
al := len(a) - 1
bl := len(b) - 1
ai := al - bl - 1
for i := bl; i >= 0; {
if ai < 0 {
a[al] = b[i]
i--
} else {
if b[i] < a[ai] {
a[al] = a[ai]
ai--
} else {
a[al] = b[i]
i--
}
}
al--
}
return a
}
附录
————————————————
版权声明:本文为CSDN博主「魏小言」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34417408/article/details/124449262