leetcode 447. Number of Boomerangs
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points (i, j, k)
such that the distance between i
and j
equals the distance between i
and k
(the order of the tuple matters).
Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000] (inclusive).
Example:
Input: [[0,0],[1,0],[2,0]] Output: 2 Explanation: The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]
class Solution: def numberOfBoomerangs(self, points): """ :type points: List[List[int]] :rtype: int """ # (i, j, k) bruteforce? # for each point, calculate the distance to other points O(n^2) # A(n, 2) def calc_dist(x, y): return (x[0]-y[0])**2 + (x[1]-y[1])**2 ans = 0 for i in xrange(0, len(points)): same_dist_points = {} for j in xrange(0, len(points)): if i != j: dist = calc_dist(points[i], points[j]) if dist not in same_dist_points: same_dist_points[dist] = 0 same_dist_points[dist] += 1 for dist in same_dist_points: if same_dist_points[dist] >= 2: ans += same_dist_points[dist]*(same_dist_points[dist]-1) return ans
精简代码:
class Solution: def numberOfBoomerangs(self, points): """ :type points: List[List[int]] :rtype: int """ # (i, j, k) bruteforce? # for each point, calculate the distance to other points O(n^2) # A(n, 2) nums = 0 for x1, y1 in points: distance = collections.defaultdict(int) for x2, y2 in points: dx = abs(x2 - x1) dy = abs(y2 - y1) d = dx * dx + dy * dy distance[d] += 1 nums += sum(n * (n-1) for n in distance.values()) return nums
关于defaultdict的用法:
>>> import collections
>>> a=collections.defaultdict(int)
>>> a
defaultdict(<type 'int'>, {})
>>> a[1]
0
>>> a
defaultdict(<type 'int'>, {1: 0})
>>> a[2]
0
>>> a
defaultdict(<type 'int'>, {1: 0, 2: 0})
>>> a[2]+=1
>>> a
defaultdict(<type 'int'>, {1: 0, 2: 1})
标签:
leetcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2017-04-01 信息检索导论的课件——http://home.ustc.edu.cn/~zhufengx/ir/pdf/
2017-04-01 通过Mesos、Docker和Go,使用300行代码创建一个分布式系统
2017-04-01 varint算法——本质上是牺牲最高位作为标识数据结束位,达到变长编码,说白了就是贪心的分割位