最小的时间和空间代价合并有序数组

魏小言
云原生领域优质创作者
博客专家认证
2022-04-27 14:03:02

目录

题目

思路

代码

附录


 

最小的时间和空间代价合并有序数组
题目
以最小的时间和空间代价合并如下两个数组,并且保证有序

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

...全文
359 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16

社区成员

发帖
与我相关
我的任务
社区描述
code杂坛:提供初级同学进阶的深度与广度!关注一线 “ 互联网时讯、各技术栈、开源产品、面试技巧......“ 等最新动态
云原生架构设计模式 个人社区
社区管理员
  • 魏小言
  • flybirding10011
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

hi,欢迎加入 “code杂坛” 社区!

code杂坛:提供初级同学进阶的深度与广度!关注一线 “ 互联网时讯、各技术栈、开源产品、面试技巧......“ 等最新动态

在这里你可以:

  • 学习最新大厂技术知识
  • 掌握技能进阶各种技巧
  • 交到志同道合的朋友
  • 获取最新图书资讯
  • 参与活动免费赠书
  • 与我们的作者、译者互动!

 

加入我们成为 code杂坛 的同学

【欢迎联系】

微信公众号:code杂坛

试试用AI创作助手写篇文章吧