美文网首页工作生活
Number of Boomerangs

Number of Boomerangs

作者: carlclone | 来源:发表于2019-07-01 13:57 被阅读0次

复盘

1.注意计算距离可能的 int 越界问题 (int 32位 ,范围: -231——231-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])
}

相关文章

网友评论

    本文标题:Number of Boomerangs

    本文链接:https://www.haomeiwen.com/subject/ckegcctx.html