给出两个图像 A 和 B ,A 和 B 为大小相同的二维正方形矩阵。(并且为二进制矩阵,只包含0和1)。
我们转换其中一个图像,向左,右,上,或下滑动任何数量的单位,并把它放在另一个图像的上面。之后,该转换的重叠是指两个图像都具有 1 的位置的数目。
(请注意,转换不包括向任何方向旋转。)
最大可能的重叠是什么?
示例 1:
输入:A = [[1,1,0],
[0,1,0],
[0,1,0]]
B = [[0,0,0],
[0,1,1],
[0,0,1]]
输出:3
解释: 将 A 向右移动一个单位,然后向下移动一个单位。
链接:https://leetcode.com/problems/image-overlap/
class Solution(object):
def largestOverlap(self, A, B):
"""
:type A: List[List[int]]
:type B: List[List[int]]
:rtype: int
"""
# 暴力穷举
n = len(A)
ha = {}
hb = {}
h = {}
res = 0
for i in range(n):
for j in range(n):
if A[i][j]:
ha[(i, j)] = 1
if B[i][j]:
hb[(i, j)] = 1
for ka in ha:
for kb in hb:
delta = (kb[0] - ka[0], kb[1] - ka[1])
h[delta] = h.get(delta, 0) + 1
res = max(res, h[delta])
return res