class Solution {
public:
int maxSum(vector<vector<int>>& grid) {
}
};
2428. 沙漏的最大总和
给你一个大小为 m x n
的整数矩阵 grid
。
按以下形式将矩阵的一部分定义为一个 沙漏 :
返回沙漏中元素的 最大 总和。
注意:沙漏无法旋转且必须整个包含在矩阵中。
示例 1:
输入:grid = [[6,2,1,3],[4,2,1,5],[9,2,8,7],[4,1,2,9]] 输出:30 解释:上图中的单元格表示元素总和最大的沙漏:6 + 2 + 1 + 2 + 9 + 2 + 8 = 30 。
示例 2:
输入:grid = [[1,2,3],[4,5,6],[7,8,9]] 输出:35 解释:上图中的单元格表示元素总和最大的沙漏:1 + 2 + 3 + 5 + 7 + 8 + 9 = 35 。
提示:
m == grid.length
n == grid[i].length
3 <= m, n <= 150
0 <= grid[i][j] <= 106
原站题解
python3 解法, 执行用时: 144 ms, 内存消耗: 17.5 MB, 提交时间: 2022-11-16 16:33:04
''' 定义沙漏的偏移矩阵 暴力循环,返回全部沙漏中元素的最大总和 ''' OFFSETS = [[0,0],[1,0],[2,0],[1,1],[0,2],[1,2],[2,2]] class Solution: def maxSum(self, grid: List[List[int]]) -> int: rows, cols = len(grid), len(grid[0]) return max( sum(grid[row+dy][col+dx] for dx,dy in OFFSETS) for row in range(rows-2) for col in range(cols-2) )
python3 解法, 执行用时: 84 ms, 内存消耗: 17.1 MB, 提交时间: 2022-11-16 16:32:05
class Solution: def maxSum(self, grid: List[List[int]]) -> int: ''' 沙漏中心只能是(i,j) 0<i<n-1; 0<j<n-1 ''' return max(grid[i - 1][j - 1] + grid[i - 1][j] + grid[i - 1][j + 1] + grid[i][j] + grid[i + 1][j - 1] + grid[i + 1][j] + grid[i + 1][j + 1] for i in range(1, len(grid) - 1) for j in range(1, len(grid[i]) - 1))