-4
A
回答
3
1
如果数组排序(因为它们看起来在你的问题中),有一种算法比通过每个元素更好。
选取a
的第一个元素,称之为x
。 二进制搜索b
第一个元素等于或大于x
。如果它们相同,则发现两个数组中都包含一个元素,如果不是,请将其作为新的x
。现在以相同的方式搜索a
的x
。重复,直到你用尽其中一个数组中的元素。
这可以简单地扩展到任意数量的数组(实际上,使用任意数量的数组写入更容易)。
这里有一个快速和肮脏的实施:
package main
import (
"fmt"
"sort"
)
func inter(arrs ...[]int) []int {
res := []int{}
x := arrs[0][0]
i := 1
for {
off := sort.SearchInts(arrs[i], x)
if off == len(arrs[i]) {
// we emptied one slice, we're done.
break
}
if arrs[i][off] == x {
i++
if i == len(arrs) {
// x was in all the slices
res = append(res, x)
x++ // search for the next possible x.
i = 0
}
} else {
x = arrs[i][off]
i = 0 // This can be done a bit more optimally.
}
}
return res
}
func main() {
a := []int{1, 2, 3, 4, 5, 7}
b := []int{5, 6, 7, 8, 9}
fmt.Println(inter(a, b))
}
0
package main
import (
set "github.com/deckarep/golang-set"
)
func array_intersect(a, b []interface{}) []interface{} {
return set.NewSetFromSlice(a).Intersect(set.NewSetFromSlice(b)).ToSlice()
}
func main() {
a := []interface{}{1, 2, 3, 4, 5, 7}
b := []interface{}{5, 6, 7, 8, 9}
println(array_intersect(a, b))
}
+0
通过使用set.Intersect:github.com/deckarep/golang-set,代码非常简单。 –
+0
我没有投票,但至少应该指出2个问题。 1)该解决方案使用引擎盖下的循环,2)'array_intersect'通常跟踪非唯一值,'[1,1,2,3]'和'[3,5,1,1] '应该是'[1,1,3]',而你的解决方案会给'[1,3]' – Akavall
0
package main
import (
"fmt"
"sort"
)
func array_intersect(a, b []int) []int {
ret := []int{}
lenA := len(a)
lenB := len(b)
if lenA == 0 || lenB == 0 {
return ret
}
sort.Ints(a)
sort.Ints(b)
var i, j int
for {
a = a[i:]
if i = sort.SearchInts(a, b[j]); i >= len(a) {
break
}
if a[i] == b[j] {
ret = append(ret, a[i])
}
if j++; j >= lenB {
break
}
}
return ret
}
func main() {
a := []int{5, 7, 1, 1, 2, 3, 4, 5, 7}
b := []int{1, 1, 5, 6, 7, 8, 9}
fmt.Printf("a=%v, b=%v", a, b)
fmt.Printf("%v\n", array_intersect(a, b))
fmt.Printf("a=%v, b=%v", a, b)
}
相关问题
- 1. 如何找到两个其他列表中的每个元素?
- 2. 比较数组一个元素在同一阵列中所有其他元素
- 3. 如何添加其他元素到我的阵列?
- 4. 如何将一个html元素粘贴到其他元素?
- 5. 如何找到一个列表元素
- 6. 如何找到在阵列中的多个元素 - JAVASCRIPT,ES6
- 7. 查找阵列中不在另一个阵列中的元素
- 8. 比较一个阵列中的所有元素与其他阵列
- 9. 找到一个数组元素数据在其他数组元素
- 10. 2D阵列,其中每个元素是一个类元素
- 11. 计数在numpy的阵列的元素数量是每一个其他元件
- 12. 从一个列表移动元素到其他列表
- 13. 如何动态加载Li元素与其他Javascript阵列li
- 14. 如何评估阵列中的其他元素
- 15. 从阵列中移除元素,然后移动其他元素
- 16. 选择一个元素,其中有任何其他元素
- 17. 如何使一个透明元素与其他元素重叠?
- 18. 定位一个元素,不管其他元素如何
- 19. 在矩阵中找到唯一元素
- 20. JQuery的找其他元素
- 21. 知道一个元素的ID,如何找到位于同一个表中的其他元素?
- 22. 如何通过嵌套在XPath其他元素中的CSS类找到元素?
- 23. 追加元素到另一个阵列
- 24. 如何找到一个小于另一个元素的元素?
- 25. 如何比较阵列元素与ArrayList中另一个阵列的元素?
- 26. 如何从两个其他阵列的元素中获取4个阵列的多个集合,但没有元素在相同阵列中两次
- 27. Python:如果元素在一个列表中,改变其他元素?
- 28. 如何找到列表中的每个元素与每个其他元素的总和
- 29. LINQ - 如果一个列表包含其他列表的元素
- 30. 如何找到,如果Powershell的Array包含其他阵列
我只是想找到像array_intersect为golang php.net/manual/en/function.array-intersect.php –
的效用函数没有内置的方法,但有一个库提供'set.intersect':https://github.com/deckarep/golang-set。但是,如果您查看实现,则会看到有一个for循环正在运行。 – Akavall
在所有可能的情况下,php效用函数本身使用foreach循环,如果您经常使用,请自己写下函数 – Pita