1 回答

TA貢獻1844條經驗 獲得超8個贊
O(len(a) + len(b))是有效的。例如,
package main
import (
? ? "fmt"
)
func main() {
? ? a := []int{1, 2, 3, 4, 5}
? ? b := []int{3, 4, 5, 6, 7, 8, 9}
? ? fmt.Println(a)
? ? fmt.Println(b)
? ? m := make(map[int]uint8)
? ? for _, k := range a {
? ? ? ? m[k] |= (1 << 0)
? ? }
? ? for _, k := range b {
? ? ? ? m[k] |= (1 << 1)
? ? }
? ? var inAAndB, inAButNotB, inBButNotA []int
? ? for k, v := range m {
? ? ? ? a := v&(1<<0) != 0
? ? ? ? b := v&(1<<1) != 0
? ? ? ? switch {
? ? ? ? case a && b:
? ? ? ? ? ? inAAndB = append(inAAndB, k)
? ? ? ? case a && !b:
? ? ? ? ? ? inAButNotB = append(inAButNotB, k)
? ? ? ? case !a && b:
? ? ? ? ? ? inBButNotA = append(inBButNotA, k)
? ? ? ? }
? ? }
? ? fmt.Println(inAAndB)
? ? fmt.Println(inAButNotB)
? ? fmt.Println(inBButNotA)
}
游樂場:https://play.golang.org/p/RvGaC9Wfjiv
輸出:
[1 2 3 4 5]
[3 4 5 6 7 8 9]
[3 4 5]
[1 2]
[8 6 7 9]
Go 編程語言規范
&? ? bitwise AND? ? ? ? ? ? integers
|? ? bitwise OR? ? ? ? ? ? ?integers
^? ? bitwise XOR? ? ? ? ? ? integers
&^? ?bit clear (AND NOT)? ? integers
<<? ?left shift? ? ? ? ? ? ?integer << unsigned integer
>>? ?right shift? ? ? ? ? ? integer >> unsigned integer
我們有 8 位用于uint8. Bit 0 ( 1 << 0, 1 shift left 0) isa和 bit 1 ( 1 << 1; 1 shift left 1) is b。對于uint8位,00000001是a,00000010是b,00000011是a和b,并且00000000是 nether anor b。操作員|設置位,&操作員讀取位。
Go 編程語言規范
地圖類型
映射是一種類型的無序元素組,稱為元素類型,由一組另一種類型的唯一鍵索引,稱為鍵類型。
必須為鍵類型的操作數完全定義比較運算符 == 和 !=;因此鍵類型不能是函數、映射或切片。如果鍵類型是接口類型,則必須為動態鍵值定義這些比較運算符;失敗將導致運行時恐慌。
該算法適用于其元素可以是映射鍵的任何切片類型。必須為鍵類型的操作數完全定義比較運算符 == 和 !=。
- 1 回答
- 0 關注
- 126 瀏覽
添加回答
舉報