zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    Shell Sort 希尔排序
    Quick Sort 快速排序
    Merge Sort 归并排序
    Insertion Sort
    Bubble Sort
    dubbo的异常栈问题
    IoC 容器
    .Net Core集成RabbitMQ
    .NET CORE Skywalking的集成
    制造业的信息化之路
  • 原文地址:https://www.cnblogs.com/seyjs/p/9805584.html
Copyright © 2011-2022 走看看