最小的时间和空间代价合并有序数组
目录
题目
思路
代码
附录
最小的时间和空间代价合并有序数组
题目
以最小的时间和空间代价合并如下两个数组,并且保证有序
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
相关推荐
将两个有序数组,合并成另一个有序的数组,升序
将两个有序数组,合并成另一个有序的数组,升序。将两个有序数组,合并成另一个有序的数组,升序。将两个有序数组,合并成另一个有序的数组,升序
最强解析面试题:最小的时间和空间代价合并有序数组
目录 最小的时间和空间代价合并有序数组 题目 思路 代码 附录 最小的时间和空间代价合并有序数组 题目 以最小的时间和空间代价合并如下两个数组,并且保证有序 a = [ 2, 5, 7, 9, 0, 0, 0], b = [ 1, 3, 6], 说明: 1、a 中 0 是无效数据,0的长度与 b 的长度一致 2、a 和 b 都是有序的,从小到大 思路 为不频繁移动数组元素,由于空位/无效位置在末尾,则将逆向对比数组末尾元素,分别移动至末尾位置,且无利用额外空间。 .
js代码-合并二维有序数组成一维有序数组
js代码-合并二维有序数组成一维有序数组
Python3合并两个有序数组代码实例
第一种思路,把两个数组合为一个数组然后再排序,问题又回归到冒泡和快排了,没有用到两个数组的有序性。(不好) 第二种思路,循环比较两个有序数组头位元素的大小,并把头元素放到新数组中,从老数组中删掉,直到其中一个数组长度为0。然后再把不为空的老数组中剩下的部分加到新数组的结尾。(好) 第二种思路的排序算法与测试代码如下: def merge_sort(a, b): ret = [] while len(a)>0 and len(b)>0: if a[0] <= b[0]: ret.append(a[0]) a.remove(a[0]) if a[0
石子合并(对于给定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



