首页 Golang

Golang拉链法快速获取两组数据交集

pyweeX 发布于 02-18
Golang
pyweeX

很少人听说拉链法,一般用它获取两组数据的交集。它的速度非常快,时间复杂度为O(n),前提条件是两组数据都必须是有序的。下面用go语言来实现这个算法,直接上代码就能看懂。

  1. func main() {
  2. fmt.Println(mixed())
  3. }
  4. func mixed() []int {
  5. a := []int{1, 3, 6, 7, 8, 9, 11, 26, 33, 39, 59, 66, 78}
  6. b := []int{1, 7, 9, 11, 23, 26, 33, 59, 66, 78, 101, 200}
  7. aLen := len(a)
  8. bLen := len(b)
  9. tLen := aLen
  10. if tLen < bLen {
  11. tLen = bLen
  12. }
  13. x := 0
  14. y := 0
  15. // 最终结果存入 result
  16. result := make([]int, 0, tLen)
  17. for i := 0; i < tLen; i++ {
  18. if x >= aLen || y >= bLen {
  19. break
  20. }
  21. if a[x] > b[y] {
  22. y++
  23. } else if a[x] < b[y] {
  24. x++
  25. } else {
  26. result = append(result, a[x])
  27. x++
  28. y++
  29. }
  30. }
  31. return result
  32. }
  33. // 输出 [1 7 9 11 26 33 59 66 78]

拉链法这个名字很形象,代码也很简洁,特别是用go语言来写看起来特别好看。

声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。

讨论 支持 Markdown 语法 点击演示
回复
评论预览框

开发者

开发者·注册登录
  • 获取验证码
  • 取消