返回 AI 资讯
社区讨论LinuxDo 最新

Leetcode每日一题 —— 835. 图像重叠

力扣 LeetCode 835. 图像重叠 - 力扣(LeetCode) 835. 图像重叠 - 给你两个图像 img1 和 img2 ,两个图像的大小都是 n x n ,用大小相同的二进制正方形矩阵表示。二进制矩阵仅由若干 0 和若干 1 组成。 转换 其中一个图像,将所有的 1 向左,右,上,或下滑动任何数量的单位;然后把它放在另一个图像的上面。该转换的 重叠 是指两个图像 都 具有 1 的位置的数目。 请注意,转换 不包括 向任何方向旋转。越过矩阵边界的 1 都将被清除。 最大可能的重叠数量是多少? 示例.…

内容摘要

作者:#魔法师 板块:#开发调优 力扣 LeetCode 835. 图像重叠 - 力扣(LeetCode) 835. 图像重叠 - 给你两个图像 img1 和 img2 ,两个图像的大小都是 n x n ,用大小相同的二进制正方形矩阵表示。二进制矩阵仅由若干 0 和若干 1 组成。 转换 其中一个图像,将所有的 1 向左,右,上,或下滑动任何数量的单位;然后把它放在另一个图像的上面。该转换的 重叠 是指两个图像 都 具有 1 的位置的数目。 请注意,转换 不包括 向任何方向旋转。越过矩阵边界的 1 都将被清除。 最大可能的重叠数量是多少?   示例... 思路 数据量不大,应该可以模拟。 1 <= n <= 30 的数据范围,完全可以将一行转换成一个int值,这样左移、右移、比较都可以借助位运算来加速,上移下移可以通过数组拷贝来完成。 代码 class Solution { public int largestOverlap(int[][] img1, int[][] img2) { int n = img1.length; int[] o1 = buildBinImg(img1, n); int[] o2 = buildBinImg(img2, n); int ans = 0; int[] base = o1; // 外层负责上下移动 for (int i = 0; i < n; i++) { ans = Math.max(ans, compare(base, o2, n)); int[] left = base, right = base; // 内层负责左右移动 for (int j = 1; j < n; j++) { left =

资讯来源

LinuxDo

原文链接

打开原文