最强解析面试题:最小的时间和空间代价合并有序数组

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

附录

“蝴蝶效应”在社会学界用来说明:一个坏的微小的机制,如果不加以及时地引导、调节,会给社会带来非常大的危害,戏称为“龙卷风”或“风暴”;一个好的微小的机制,只要正确指引,经过一段时间的努力,将会产生轰动效应,或称为“革命”。

以上是关于最强解析面试题:最小的时间和空间代价合并有序数组的主要内容,如果未能解决你的问题,请参考以下文章

最强解析面试题:最小 K 个数

最强解析面试题:在无序数组中取最大的K个数「建议收藏!」

最强解析面试题:合并两个排序的链表

最强解析面试题:连续子数组的最大和

最强解析面试题:和为S的两个数字

最强解析面试题:旋转数组查找