A.每日一题:835. 图像重叠

题目链接:835. 图像重叠(中等)

算法原理:

解法:暴力枚举

时间复杂度O(N⁴)

11ms击败80.14%

记:

n:矩阵边长

dx:img1 向下移动 dx 单位(dx>0是往下挪,dx<0是往上挪)

dy:img1 向右移动 dx 单位(dx>0是往右挪,dx<0是往左挪)

cnt1:当前这个平移方案下,重复 1 的总数

那么 img1ij 平移后对应 img2i+dxj+dy

必须保证移动后不越界:0 <= i+dx < n

同时本身也不能越界:0 <= i < n

二者取交集:max(-dx,0) <= i < min(n-dx,n)

遍历时先枚举移动多少单位,再去枚举每一个元素在该移动单位下能重叠的 1 的个数(两个数都是1,才能让计数+1)

Java代码:

java 复制代码
class Solution {
    //835. 图像重叠
    public int largestOverlap(int[][] img1, int[][] img2) {
        int n=img1.length;
        int ret=0;
        for(int dx=1-n;dx<n;dx++){
            for(int dy=1-n;dy<n;dy++){
                int cnt1=0;
                for(int i=Math.max(-dx,0);i<Math.min(n-dx,n);i++){
                    for(int j=Math.max(-dy,0);j<Math.min(n-dy,n);j++){
                        //两个数都是1,才能让cnt1增加1
                        cnt1+=img1[i][j]*img2[i+dx][j+dy];
                    }
                }
                ret=Math.max(ret,cnt1);
            }
        }
        return ret;
    }
}
相关推荐
wewowilling18 分钟前
认识微服务
java·运维·微服务·springcloud
代码什么用38 分钟前
Java Web 7-10
java·servlet
沫璃染墨1 小时前
《Qt从零入门系列(十三):QSS样式表详解——从选择器与层叠规则到控件美化实战》
开发语言·css·c++·qt·ui·qt6.3·qss
垆边人似月.1 小时前
华为机试题 :和为 K 的子数组个数
算法·leetcode·华为
达子6661 小时前
RUST 图解 第 3 章:通用编程概念(Common Programming Concepts)
开发语言·算法·rust
夏幻灵2 小时前
每日一题:LeetCode 165:比较版本号
算法·leetcode·职场和发展
道尔柯南2 小时前
C++ 面向对象编程入门:类和对象(上)
开发语言·c++·算法
楠楠子呀2 小时前
英语、西语、阿语客户各开一个口:多语言获客的分流方案
开发语言·javascript·ecmascript·跨境电商·whatsapp·营销工具
Navigator_Z2 小时前
LeetCode //C - 1288. Remove Covered Intervals
c语言·算法·leetcode
tachibana22 小时前
使用for range 的时候,它的地址会发生变化吗?
开发语言·后端·golang·go·语法