Leetcode 447 Number of Boomerangs

twisted-fate發表於2019-05-25

覆盤

1.注意計算距離可能的 int 越界問題 (int 32位 ,範圍: -2^31——2^31-1,即-2147483648——2147483647 , 大約 20 億 , 10 位數 long long 64位,範圍: -9223372036854775808~9223372036854775807 (19位數, 9e18 ) 2^63 - 1)

2.查詢表,靈活選擇鍵值 , 明確想查詢什麼資料 , 這裡查詢的是其他點到該點"距離相同"的"個數" , 確定一個樞紐 , 圍繞著它查詢 , 比如另一題 , 給你4 個點判斷,判斷是否為矩形 , 計算出 4 個點的中點 , 再計算出 4 個點到中點的距離,存入 map , 遍歷 map , 如果有到中點距離個數為 4 的鍵值對 , 則可以確認是矩形

3.三元組 , 排列問題 , 這裡先 錨定一個 , 再從 該距離的個數裡取一個 * (個數-1 裡再取一個) 種排列

4.沒畫圖和寫定義............之後補上

pesudo code :

res=0

foreach all point
    generate curr point dis map

    foreach dismap as disCount
        res=res+ disCount * disCount-1

return res

func main() {
    s:=[][]int{{0,0} ,{1,0},{2,0}}
    fmt.Println(numberOfBoomerangs(s))

}

func numberOfBoomerangs(points [][]int) int {
    res := 0
    for i, v1 := range points {
        map1:=make(map[int]int)
        for j, v2 := range points {
            if i == j {
                continue
            }
            map1[dis(v1,v2)]++
            fmt.Println(map1)
        }

        for _,v:=range map1 {
            res=res+ v*(v-1)
        }
    }

    return res
}

func dis(point1 []int, point2 []int) int {
    return (point2[0]-point1[0])*(point2[0]-point1[0])+ (point2[1]-point1[1])*(point2[1]-point1[1])
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章