如何将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
}
}
}