LeetCode 835. Image Overlap
考点 | 难度 |
---|---|
Matrix | Medium |
题目
You are given two images, img1 and img2, represented as binary, square matrices of size n x n. A binary matrix has only 0s and 1s as values.
We translate one image however we choose by sliding all the 1 bits left, right, up, and/or down any number of units. We then place it on top of the other image. We can then calculate the overlap by counting the number of positions that have a 1 in both images.
Note also that a translation does not include any kind of rotation. Any 1 bits that are translated outside of the matrix borders are erased.
Return the largest possible overlap.
思路
1 保存image A和B里1的坐标
2 iterate所有1的坐标,组合所有A里1的坐标和B里1的坐标的差并且计数,如果两个组合差相等说明按这个差移动可以同时match两个1
3 返回最大值
答案
class Solution:
def largestOverlap(self, A, B):
d = collections.defaultdict(int)
a = []
b = []
for i in range(len(A)):
for j in range(len(A[0])):
if(A[i][j] == 1):
a.append((i,j))
if(B[i][j] == 1):
b.append((i,j))
ans = 0
for t1 in a:
for t2 in b:
t3 = (t2[0]-t1[0],t2[1]-t1[1])
d[t3] += 1
ans = max(ans, d[t3])
return ans