亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從兩個數組/切片中獲取交集和排除項的最有效方法是什么?

從兩個數組/切片中獲取交集和排除項的最有效方法是什么?

Go
小怪獸愛吃肉 2023-03-29 15:26:12
給定兩個數組或切片,例如:a := []int{1, 2, 3, 4, 5}b := []int{3, 4, 5, 6, 7, 8, 9}切片可能未排序,順序無關緊要。計算值的最有效方法是什么,這樣您最終得到兩個切片的公共元素,并且剩余元素存在于一個而不是另一個,即對于上面給出的兩個數組,返回值將是:common := []int{3, 4, 5}inAButNotB := []int{1, 2}inBButNotA := []int{6, 7, 8, 9}很容易計算交集,將一個切片轉換為地圖,然后迭代該切片以查看值是否存在。有沒有辦法在同一個循環中計算其他兩個值?
查看完整描述

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 編程語言規范

地圖類型

映射是一種類型的無序元素組,稱為元素類型,由一組另一種類型的唯一鍵索引,稱為鍵類型。

必須為鍵類型的操作數完全定義比較運算符 == 和 !=;因此鍵類型不能是函數、映射或切片。如果鍵類型是接口類型,則必須為動態鍵值定義這些比較運算符;失敗將導致運行時恐慌。

該算法適用于其元素可以是映射鍵的任何切片類型。必須為鍵類型的操作數完全定義比較運算符 == 和 !=。


查看完整回答
反對 回復 2023-03-29
  • 1 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號