最强解析面试题:最小的时间和空间代价合并有序数组
Posted 魏小言
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最强解析面试题:最小的时间和空间代价合并有序数组相关的知识,希望对你有一定的参考价值。
目录
最小的时间和空间代价合并有序数组
题目
以最小的时间和空间代价合并如下两个数组,并且保证有序
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 := []int2, 5, 7, 9, 0, 0, 0
b := []int1, 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
附录
“蝴蝶效应”在社会学界用来说明:一个坏的微小的机制,如果不加以及时地引导、调节,会给社会带来非常大的危害,戏称为“龙卷风”或“风暴”;一个好的微小的机制,只要正确指引,经过一段时间的努力,将会产生轰动效应,或称为“革命”。
以上是关于最强解析面试题:最小的时间和空间代价合并有序数组的主要内容,如果未能解决你的问题,请参考以下文章