双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

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

魏小言 魏小言 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

目录

题目

思路

代码

附录


 

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

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

...全文

相关推荐

将两个有序数组,合并成另一个有序的数组,升序

将两个有序数组,合并成另一个有序的数组,升序。将两个有序数组,合并成另一个有序的数组,升序。将两个有序数组,合并成另一个有序的数组,升序

Button11

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

目录 最小的时间和空间代价合并有序数组 题目 思路 代码 附录 最小的时间和空间代价合并有序数组 题目 以最小的时间和空间代价合并如下两个数组,并且保证有序 a = [ 2, 5, 7, 9, 0, 0, 0], b = [ 1, 3, 6], 说明: 1、a 中 0 是无效数据,0的长度与 b 的长度一致 2、a 和 b 都是有序的,从小到大 思路 为不频繁移动数组元素,由于空位/无效位置在末尾,则将逆向对比数组末尾元素,分别移动至末尾位置,且无利用额外空间。 .

魏小言

js代码-合并二维有序数组成一维有序数组

js代码-合并二维有序数组成一维有序数组

weixin_38670700

Python3合并两个有序数组代码实例

第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好) 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] &lt;= b[0]: ret.append(a[0]) a.remove(a[0]) if a[0

weixin_38553466

石子合并(对于给定n堆石子,编程计算合并成一堆的最小得分和最大得分)

Problem F:石子合并 Time Limit:1000MS Memory Limit:65536K Total Submit:1180 Accepted:386 Language: not limited Description 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。 例如,图1所示的4堆石,每堆石子数(从最上面的一堆数起,顺时针数)依次为4、5、9、4。则3次合并得分总和最小的方案为图2,得分总和最大的方案为图3。 编程任务: 对于给定n堆石子,编程计算合并成一堆的最小得分和最大得分。 Input 输入第1 行是正整数n,1<=n<=100,表示有n堆石子。 第二行有n个数,分别表示每堆石子的个数。 Output 程序运行结束时,输出两行,第1 行中的数是最小得分;第2 行中的数是最大得分。 Sample Input 4 4 4 5 9 Sample Output 43 54

yhwsupermax
评论
收藏 已收藏
分享
返回顶部
魏小言
魏小言 优质创作者: 云计算技术领域 优质创作者: 云计算技术领域领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
code杂坛 16 成员 76 内容