列表

详情


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 。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: int maxSum(vector<vector<int>>& grid) { } };

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))

上一题