覆盤
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 協議》,轉載必須註明作者和本文連結