【leetcode】835. Image Overlap


題目如下:

解題思路:拋開移動的過程只看移動完成的結果,記圖片左上角為頂點,正方形邊長為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,求出最大值即可。

代碼如下:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM