N个有序的集合合并成一个有序集合
程序员文章站
2022-06-09 22:00:10
...
如何将N个有序的集合合并成一个有序集合?!
我们可以将集合进行两两合并,然后将结果再次两两合并,不断重复,最终合并成一个集合,实际上就只是个递归算法,代码如下:
package main
import "fmt"
func main() {
mock1:= []int {2,5,9}
mock2:= []int {1,3,4}
mock3:= []int {6,7,8}
fmt.Println(mergeN(mock1, mock2, mock3)) // 输出:[1 2 3 4 5 6 7 8 9]
}
func mergeN(arrs ...[]int) ([] int) {
if len(arrs) == 0{
return nil
}
if len(arrs) == 1{
return arrs[0]
}
m:=len(arrs)/ 2
return merge(mergeN(arrs[:m]...),mergeN(arrs[m:]...) )
}
func merge(aa, bb [] int) (result [] int) {
if len(aa) == 0{
return bb
}
if len(bb) == 0{
return aa
}
var ai, bi = 0, 0
for{
a:= aa[ai]
b := bb[bi]
if a < b || a == b{
result = append(result, a)
ai++
} else {
result = append(result, b)
bi++
}
if ai == len(aa) || bi == len(bb) {
// 如果aa已经读完,bb没读完,将剩余bb加入
if ai == len(aa) && bi!= len(bb){
result = append(result, bb[bi:]...)
} else if bi == len(bb) && ai!= len(aa){
result = append(result, aa[ai:]...)
}
return result
}
}
}
上一篇: List集合,关于LIST集合一些特性
下一篇: Java之LIst集合一
推荐阅读
-
laravel将多个数组的集合合并成一个数组的集合/拆分成多个数组
-
C语言:保持数列有序:有n(约定n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。
-
如何从一个集合中找到n个最大或最小的元素?python
-
jdk8使用stream实现两个list集合合并成一个(对象属性的合并)
-
redis有序集合的一个应用
-
N个有序的集合合并成一个有序集合
-
java中简单介绍一个有序的,允许重复的集合 List
-
java中简单介绍一个有序的,允许重复的集合 List
-
java 实现将多个有序的日志文件 合并成一个有序的日志文件(RandomAccessFile实现 或者用 IO流实现【BufferedReader,BufferedOutputStream】)
-
C语言使用二分法实现在一个有序数组中查找具体的某个数字n