You are given an n x n integer matrix grid.
Generate an integer matrix maxLocal of size (n - 2) x (n - 2) such that:
maxLocal[i][j] is equal to the largest value of the 3 x 3 matrix in grid centered around row i + 1 and column j + 1.In other words, we want to find the largest value in every contiguous 3 x 3 matrix in grid.
Return the generated matrix.
Example 1:
Input: grid = [[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]] Output: [[9,9],[8,6]] Explanation: The diagram above shows the original matrix and the generated matrix. Notice that each value in the generated matrix corresponds to the largest value of a contiguous 3 x 3 matrix in grid.
Example 2:
Input: 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]] Output: [[2,2,2],[2,2,2],[2,2,2]] Explanation: Notice that the 2 is contained within every contiguous 3 x 3 matrix in grid.
Constraints:
n == grid.length == grid[i].length3 <= n <= 1001 <= grid[i][j] <= 100class Solution {
public int solve(int[][] grid, int x, int y){
int maxLocal = 0;
for(int i=x-1; i<=x+1; i++)
for(int j=y-1; j<=y+1; j++)
maxLocal = Math.max(maxLocal, grid[i][j]);
return maxLocal;
}
public int[][] largestLocal(int[][] grid) {
int k = grid.length-2;
int[][] ans = new int[k][k];
for(int i=0; i<k; i++)
for(int j=0; j<k; j++)
ans[i][j] = solve(grid, i+1, j+1);
return ans;
}
}