Skip to content

Instantly share code, notes, and snippets.

@XUJiahua
Created April 30, 2019 03:28
Show Gist options
  • Save XUJiahua/0dfddf37c3fb1c51ad1dcf6e6fc92b7d to your computer and use it in GitHub Desktop.
Save XUJiahua/0dfddf37c3fb1c51ad1dcf6e6fc92b7d to your computer and use it in GitHub Desktop.
find num of common friends between users
package main
import (
"fmt"
"github.com/davecgh/go-spew/spew"
)
type adjList []int
// find num of common friends between 1 and other user
func main() {
var adjLists = []adjList{
[]int{}, // index from 1
[]int{2, 3, 4},
[]int{1, 3, 5},
[]int{1, 2, 4, 5, 6, 7},
[]int{1, 3},
[]int{2, 3},
[]int{3},
[]int{3},
}
// spew.Dump(adjLists)
var df [][]int
// 1. map: omit possible pair
for i := 1; i <= 7; i++ {
al := adjLists[i]
for j := 0; j < len(al)-1; j++ {
for k := j + 1; k < len(al); k++ {
df = append(df, []int{al[j], al[k]})
}
}
}
spew.Dump(df)
fmt.Println("==========================")
// 2. filter i = 1
var filteredDf [][]int
var filter = 1
for _, row := range df {
if row[0] == filter || row[1] == filter {
filteredDf = append(filteredDf, row)
}
}
spew.Dump(filteredDf)
fmt.Println("==========================")
// 3. group
m := make(map[string]int)
for _, row := range filteredDf {
m[fmt.Sprintf("(%d, %d)", row[0], row[1])]++
}
for k, v := range m {
fmt.Printf("%s: %d\n", k, v)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment