12просмотров
85.7%от подписчиков
19 марта 2026 г.
📷 ФотоScore: 13
#leetcode #medium #microsoft 3212. Count Submatrices With Equal Frequency of X and Y Дейлик литкода 19.03.2026 Given a 2D character matrix grid, where grid[i][j] is either 'X', 'Y', or '.', return the number of submatrices that contain: grid[0][0]
an equal frequency of 'X' and 'Y'.
at least one 'X'. По сути задачка такая же, как вчера.
Только литкод какое-то кривоватое решение решение предлагает.
Вчерашнее адаптировал. class Solution { public int numberOfSubmatrices(char[][] grid) { int n = grid.length; int m = grid[0].length; // Префиксные суммы только для 'X' и 'Y' // prefixX[i+1][j+1] = кол-во 'X' в прямоугольнике от (0,0) до (i,j) int[][] prefixX = new int[n + 1][m + 1]; int[][] prefixY = new int[n + 1][m + 1]; // Заполняем префиксные суммы for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { // Переносим значения из левой и верхней ячейки prefixX[i + 1][j + 1] = prefixX[i + 1][j] + prefixX[i][j + 1] - prefixX[i][j]; prefixY[i + 1][j + 1] = prefixY[i + 1][j] + prefixY[i][j + 1] - prefixY[i][j]; // Добавляем текущую клетку if (grid[i][j] == 'X') { prefixX[i + 1][j + 1]++; } else if (grid[i][j] == 'Y') { prefixY[i + 1][j + 1]++; } } } int count = 0; // Проверяем все возможные прямоугольники [0..i][0..j] for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { int cntX = prefixX[i + 1][j + 1]; int cntY = prefixY[i + 1][j + 1]; if (cntX == cntY && cntX >= 1) { count++; } } } return count; }
}