美文网首页工作生活
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