题目
思路 哈希表
用哈希表再套一个哈希表,外层哈希表的键是行的纵坐标,内层哈希表的键是列的横坐标,值是该位置点的个数。count函数的实现,先判断y是不是在哈希表里,如果不在直接返回0。再遍历哈希表的所有行,计算出正方形的边长,让结果加上另外三个点出现次数的乘积,有向左取和向右取两种情况。
代码
class DetectSquares:
def __init__(self):
self.cnt = defaultdict(Counter)
def add(self, point: List[int]) -> None:
x, y = point
self.cnt[y][x] += 1
def count(self, point: List[int]) -> int:
x, y = point
if(not y in self.cnt):
return 0
yCnt = self.cnt[y]
ans = 0
for col,colCnt in self.cnt.items():
if(col == y):
continue
d = col - y
ans += colCnt[x]*yCnt[x-d]*colCnt[x-d]
ans += colCnt[x]*yCnt[x+d]*colCnt[x+d]
return ans
# Your DetectSquares object will be instantiated and called as such:
# obj = DetectSquares()
# obj.add(point)
# param_2 = obj.count(point)