Golang拉链法快速获取两组数据交集
很少人听说拉链法,一般用它获取两组数据的交集。它的速度非常快,时间复杂度为O(n),前提条件是两组数据都必须是有序的。下面用go语言来实现这个算法,直接上代码就能看懂。
func main() {
fmt.Println(mixed())
}
func mixed() []int {
a := []int{1, 3, 6, 7, 8, 9, 11, 26, 33, 39, 59, 66, 78}
b := []int{1, 7, 9, 11, 23, 26, 33, 59, 66, 78, 101, 200}
aLen := len(a)
bLen := len(b)
tLen := aLen
if tLen < bLen {
tLen = bLen
}
x := 0
y := 0
// 最终结果存入 result
result := make([]int, 0, tLen)
for i := 0; i < tLen; i++ {
if x >= aLen || y >= bLen {
break
}
if a[x] > b[y] {
y++
} else if a[x] < b[y] {
x++
} else {
result = append(result, a[x])
x++
y++
}
}
return result
}
// 输出 [1 7 9 11 26 33 59 66 78]
拉链法这个名字很形象,代码也很简洁,特别是用go语言来写看起来特别好看。
声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。
开发者
专题·造轮子
Golang·热门