个人练习-Leetcode-835. Image Overlap

news/2025/1/14 7:38:14/

题目链接:https://leetcode.cn/problems/image-overlap/

题目大意:给出两个位图矩阵img1[][]img2[][],其中元素只有01。一次平移是指将一个图像里【所有的1】都向左/右/上/下移动一格。求经过若干次平移后,两个图像能重叠的1的最多个数是多少。

思路:用一个pair<int, int> diff来表示若干次的平移(或者我们称为,一种平移),其实就是求两个图像的1之间,哪种平移的数量最多。找到两个图像所有的1,进行遍历即可。

【注意】虽然有些题目说可以将二维矩阵转换成一维来做,但我这样尝试时发现是有些不对的。比如img1[][]中第 i i i行末尾的元素,和img2[][]中第 i + 1 i+1 i+1行第一个元素,做差得到的是-1。但img1[][]中第 i i i行倒数第二个元素,和img2[][]中第 i i i行最后一个元素,做差也是-1。但显然这两种平移是不同的,我认为仅用一维来表示平移是不够的。上述两种平移用二维表示分别是(-n, 1)(1, 0),一个是先向左n格,再向下1格;另一个则是向右移动1格。

因此老老实实用二维表示平移向量做。

完整代码

class Solution {
public:int largestOverlap(vector<vector<int>>& img1, vector<vector<int>>& img2) {int N = img1.size();vector<pair<int, int>> ones1;map<pair<int, int>, int> diff2cnt;for (int i = 0; i < img1.size(); i++) {for (int j = 0; j < img1[0].size(); j++) {if (img1[i][j])ones1.push_back(make_pair(i, j));}} for (int i = 0; i < img2.size(); i++) {for (int j = 0; j < img2[0].size(); j++) {if (img2[i][j]) {for (auto coord : ones1) {auto diff = make_pair(i - coord.first, j - coord.second);if (diff2cnt.find(diff) == diff2cnt.end())diff2cnt[diff] = 1;elsediff2cnt[diff]++;}}   }} int ret = 0;for (auto it = diff2cnt.begin(); it != diff2cnt.end(); it++)ret = max(ret, it->second);return ret;}
};

http://www.ppmy.cn/news/300059.html

相关文章

24考研835软件工程经验贴

大家好&#xff0c;今天给大家介绍一下我在考研这一年之中有关于835软件工程的一些经验和误区。 1.经验之谈 首先&#xff0c;我是一个二战的考生&#xff0c;一战给我带来的经验有几点。第一&#xff0c;数学、专业课这两门越早复习越好&#xff0c;越拖到后面你就会发现来不及…

835:排列

总时间限制: 5000ms 内存限制: 65536kB 描述 题目描述&#xff1a;大家知道&#xff0c;给出正整数n&#xff0c;则1到n这n个数可以构成n&#xff01;种排列&#xff0c;把这些排列按照从小到大的顺序&#xff08;字典顺序&#xff09;列出&#xff0c;如n3时&#xff0c…

海南大学电子信息(085400)原软件工程835

欢迎学弟学妹报考海南大学 你是不是没有资料&#xff1f; 海南大学软件工程835&#xff08;网安和计科&#xff09;&#xff0c;由多名软工学长学姐共同编写&#xff0c;专业课知识框架清晰&#xff0c;包含16-22各年份真题&#xff08;内含答案&#xff09;、总结知识点、专…

Codeforces Round #835 (Div. 4)A~D

Codeforces Round #835 (Div. 4&#xff09; A. Medium Number 感受&#xff1a;太简单了&#xff01;&#xff01;&#xff01;简单简单简单&#xff01; 题意&#xff1a;三个数找中间数 我的思路&#xff1a;sort() 题解&#xff1a;这没啥思路感觉 #include <iost…

Codeforces Round #835 (Div. 4) A~G

原题链接&#xff1a;Codeforces Round #835 (Div. 4) 目录 A. Medium Number B. Atillas Favorite Problem C. Advantage D. Challenging Valleys E. Binary Inversions F. Quests G. SlavicGs Favorite Problem A. Medium Number 题意&#xff1a;输出三个数的中间…

ipad协议835最新版

微信作为中国最流行的社交媒体应用之一&#xff0c;其协议安全性一直备受关注。逆向微信协议可以帮助我们更好地理解微信的工作原理&#xff0c;进而开发出更好的第三方应用或者提高自己的安全意识。本文将介绍微信逆向协议开发的基本流程和注意事项。 ## 什么是微信逆向协议&a…

Codeforces Round #835 (Div. 4)

文章目录 一、A - Medium Number二、B - Atillas Favorite Problem三、C - Advantage四、D - Challenging Valleys五、E - Binary Inversions六、F - Quests七、G - SlavicGs Favorite Problem 一、A - Medium Number 代码: #include <bits/stdc.h> #define ios ios::s…

Codeforces Round #835 (Div. 4) G. SlavicG‘s Favorite Problem

翻译&#xff1a; 给您一个带有&#x1d45b;顶点的加权树。回想一下&#xff0c;树是一个没有任何循环的连通图。加权树是每条边都有一定权重的树。树是无向的&#xff0c;它没有根。 因为树木让你厌烦&#xff0c;所以你决定挑战自己&#xff0c;在给定的树上玩一款游戏。 …