【leetcode】835. Image Overlap

題目以下:spa

解題思路:拋開移動的過程只看移動完成的結果,記圖片左上角爲頂點,正方形邊長爲board,要使得兩個圖片要有重疊,那麼必定其中一張圖片的頂點和另一張圖片的某一個點重合。假設圖片A的頂點A(0,0)和圖片B的其中一個點B(x,y)重合,那麼A與B重合的區域就是A(0,0) -> A(board-x,board-y) ,B(x,y) -> B(board,board) ,計算A與B的重合部分中每一個點都爲1的個數就是A(0,0)與B(x,y)重合時候能獲得的overlap。最後計算出B中全部點與A(0,0)重合和A中全部點與B(0,0)重合的overlap,求出最大值便可。code

代碼以下:blog

class Solution(object): def getOverlap(self,a,b,ax,ay): count = 0 for i in range(ax,len(a)): for j in range(ay,len(a[i])): if a[i][j] == b[i-ax][j-ay] == 1: count += 1
        return count def largestOverlap(self, A, B): """ :type A: List[List[int]] :type B: List[List[int]] :rtype: int """ res = 0 board = len(A) for i in range(board): for j in range(board): res = max(res,self.getOverlap(A,B,i,j)) res = max(res, self.getOverlap(B, A, i, j)) return res
相關文章
相關標籤/搜索