P
PHP | LeetCode
@easy_php_task1.4K подп.
114просмотров
7.9%от подписчиков
18 марта 2026 г.
statsScore: 125
Задача: 835. Image Overlap Сложность: medium Вам даны два изображения, img1 и img2, представленные как бинарные квадратные матрицы размером n x n. Бинарная матрица содержит только 0 и 1 в качестве значений. Мы можем сдвигать одно изображение как угодно, перемещая все биты 1 влево, вправо, вверх и/или вниз на любое количество единиц. Затем мы помещаем его поверх другого изображения. После этого мы можем вычислить перекрытие, подсчитав количество позиций, на которых в обоих изображениях есть 1. Также обратите внимание, что при сдвиге не допускается никакое вращение. Любые биты 1, которые перемещаются за пределы границ матрицы, стираются. Верните максимальное возможное перекрытие. Пример: Input: img1 = [[1,1,0],[0,1,0],[0,1,0]], img2 = [[0,0,0],[0,1,1],[0,0,1]] Output: 3 Explanation: We translate img1 to right by 1 unit and down by 1 unit. 👨‍💻 Алгоритм: 1⃣Определите функцию shiftAndCount(xShift, yShift, M, R), которая смещает матрицу M относительно матрицы R на координаты (xShift, yShift) и подсчитывает количество единиц в зоне перекрытия. 2⃣Организуйте цикл по всем возможным комбинациям координат смещения (xShift, yShift). 3⃣На каждой итерации вызывайте функцию shiftAndCount() дважды для обоих направлений смещения и обновляйте максимальное количество перекрытий. 😎 Решение: class Solution { function shiftAndCount(&#036;xShift, &#036;yShift, &#036;M, &#036;R) { &#036;leftShiftCount = 0; &#036;rightShiftCount = 0; &#036;rRow = 0; for (&#036;mRow = &#036;yShift; &#036;mRow < count(&#036;M); ++&#036;mRow) { &#036;rCol = 0; for (&#036;mCol = &#036;xShift; &#036;mCol < count(&#036;M); ++&#036;mCol) { if (&#036;M[&#036;mRow][&#036;mCol] == 1 && &#036;M[&#036;mRow][&#036;mCol] == &#036;R[&#036;rRow][&#036;rCol]) { &#036;leftShiftCount++; } if (&#036;M[&#036;mRow][&#036;rCol] == 1 && &#036;M[&#036;mRow][&#036;rCol] == &#036;R[&#036;rRow][&#036;mCol]) { &#036;rightShiftCount++; } &#036;rCol++; } &#036;rRow++; } return max(&#036;leftShiftCount, &#036;rightShiftCount); } function largestOverlap(&#036;A, &#036;B) { &#036;maxOverlaps = 0; for (&#036;yShift = 0; &#036;yShift < count(&#036;A); ++&#036;yShift) { for (&#036;xShift = 0; &#036;xShift < count(&#036;A); ++&#036;xShift) { &#036;maxOverlaps = max(&#036;maxOverlaps, &#036;this->shiftAndCount(&#036;xShift, &#036;yShift, &#036;A, &#036;B)); &#036;maxOverlaps = max(&#036;maxOverlaps, &#036;this->shiftAndCount(&#036;xShift, &#036;yShift, &#036;B, &#036;A)); } } return &#036;maxOverlaps; } } Ставь 👍 и забирай 📚 Базу знаний
114
просмотров
2832
символов
Да
эмодзи
Нет
медиа

Другие посты @easy_php_task

Все посты канала →
Задача: 835. Image Overlap Сложность: medium Вам даны два из — @easy_php_task | PostSniper