class Solution {
public:
vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
}
};
2373. 矩阵中的局部最大值
给你一个大小为 n x n
的整数矩阵 grid
。
生成一个大小为 (n - 2) x (n - 2)
的整数矩阵 maxLocal
,并满足:
maxLocal[i][j]
等于 grid
中以 i + 1
行和 j + 1
列为中心的 3 x 3
矩阵中的 最大值 。换句话说,我们希望找出 grid
中每个 3 x 3
矩阵中的最大值。
返回生成的矩阵。
示例 1:
输入:grid = [[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]] 输出:[[9,9],[8,6]] 解释:原矩阵和生成的矩阵如上图所示。 注意,生成的矩阵中,每个值都对应 grid 中一个相接的 3 x 3 矩阵的最大值。
示例 2:
输入:grid = [[1,1,1,1,1],[1,1,1,1,1],[1,1,2,1,1],[1,1,1,1,1],[1,1,1,1,1]] 输出:[[2,2,2],[2,2,2],[2,2,2]] 解释:注意,2 包含在 grid 中每个 3 x 3 的矩阵中。
提示:
n == grid.length == grid[i].length
3 <= n <= 100
1 <= grid[i][j] <= 100
原站题解
golang 解法, 执行用时: 12 ms, 内存消耗: 6.2 MB, 提交时间: 2022-08-23 10:17:22
func largestLocal(grid [][]int) [][]int { n := len(grid) for i, row := range grid[:n-2] { for j := 0; j < n-2; j++ { mx := 0 for _, r := range grid[i : i+3] { for _, v := range r[j : j+3] { mx = max(mx, v) } } row[j] = mx } grid[i] = row[:n-2] } return grid[:n-2] } func max(a, b int) int { if b > a { return b }; return a}
python3 解法, 执行用时: 96 ms, 内存消耗: 15.2 MB, 提交时间: 2022-08-23 10:17:06
class Solution: def largestLocal(self, grid: List[List[int]]) -> List[List[int]]: # 把最大值直接保存在 3 × 3 矩阵的左上角,这样可以无需创建返回矩阵。 n = len(grid) for i in range(n - 2): for j in range(n - 2): grid[i][j] = max(max(row[j:j + 3]) for row in grid[i:i + 3]) del grid[i][-2:] del grid[-2:] # 不要直接 return grid[:-2] 那样会有额外的拷贝 return grid
java 解法, 执行用时: 3 ms, 内存消耗: 42.8 MB, 提交时间: 2022-08-23 10:15:51
class Solution { public int[][] largestLocal(int[][] grid) { int n = grid.length; int size = 3; int[][] convolution = new int[n - size + 1][n - size + 1]; // 步长1,类似计算3*3卷积 for (int i = 0; i <= n - size; i++) { for (int j = 0; j <= n - size; j++) { convolution[i][j] = findMaxVal(grid, i, j, size); } } return convolution; } // 遍历子矩阵查找找最大值 private int findMaxVal(int[][] grid, int i, int j, int size) { int maxVal = grid[i][j]; for (int p = i; p < i + size; p++) { for (int q = j; q < j + size; q++) { if (grid[p][q] >= maxVal) { maxVal = grid[p][q]; } } } return maxVal; } }