Leetcode 447 Number of Boomerangs

复盘#

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 协议》,转载必须注明作者和本文链接