
Input: grid =[[6,2,1,3],[4,2,1,5],[9,2,8,7],[4,1,2,9]]Output: 30Explanation: The cells shown above represent the hourglass with the maximum sum:6+2+1+2+9+2+8=30.

Input: grid =[[1,2,3],[4,5,6],[7,8,9]]Output: 35Explanation: There is only one hourglass in the matrix,with the sum:1+2+3+5+7+8+9=35.
An hourglass in a matrix is a fixed 3x3 pattern. By iterating over all possible top-left positions of an hourglass, we can compute the sum for each and track the maximum. This works because the hourglass shape is always the same and must fit entirely within the matrix.
classSolution {
public:int maxSum(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size(), ans = INT_MIN;
for (int i =0; i +2< m; ++i) {
for (int j =0; j +2< n; ++j) {
int s = grid[i][j] + grid[i][j+1] + grid[i][j+2]
+ grid[i+1][j+1]
+ grid[i+2][j] + grid[i+2][j+1] + grid[i+2][j+2];
ans = max(ans, s);
}
}
return ans;
}
};
classSolution {
publicintmaxSum(int[][] grid) {
int m = grid.length, n = grid[0].length, ans = Integer.MIN_VALUE;
for (int i = 0; i + 2 < m; ++i) {
for (int j = 0; j + 2 < n; ++j) {
int s = grid[i][j]+ grid[i][j+1]+ grid[i][j+2]+ grid[i+1][j+1]+ grid[i+2][j]+ grid[i+2][j+1]+ grid[i+2][j+2];
ans = Math.max(ans, s);
}
}
return ans;
}
}
classSolution {
funmaxSum(grid: Array<IntArray>): Int {
val m = grid.size
val n = grid[0].size
var ans = Int.MIN_VALUE
for (i in0 until m - 2) {
for (j in0 until n - 2) {
val s = grid[i][j] + grid[i][j+1] + grid[i][j+2] +
grid[i+1][j+1] +
grid[i+2][j] + grid[i+2][j+1] + grid[i+2][j+2]
ans = maxOf(ans, s)
}
}
return ans
}
}
defmax_sum(grid: list[list[int]]) -> int:
m, n = len(grid), len(grid[0])
ans = float('-inf')
for i in range(m -2):
for j in range(n -2):
s = grid[i][j] + grid[i][j+1] + grid[i][j+2] \
+ grid[i+1][j+1] \
+ grid[i+2][j] + grid[i+2][j+1] + grid[i+2][j+2]
ans = max(ans, s)
return ans
impl Solution {
pubfnmax_sum(grid: Vec<Vec<i32>>) -> i32 {
let m = grid.len();
let n = grid[0].len();
letmut ans =i32::MIN;
for i in0..m-2 {
for j in0..n-2 {
let s = grid[i][j] + grid[i][j+1] + grid[i][j+2]
+ grid[i+1][j+1]
+ grid[i+2][j] + grid[i+2][j+1] + grid[i+2][j+2];
ans = ans.max(s);
}
}
ans
}
}