-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