You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode矩阵最大局部值问题调试求助:结果不符预期

解决Largest Local Values in a Matrix代码中的赋值问题

你的代码核心问题出在结果矩阵res的初始化方式上,另外还有一个潜在的边界问题需要优化:

1. 结果矩阵初始化错误

在Python中,[[0] * (n-2)] * (n-2)这种写法会创建一个包含n-2个同一列表引用的列表。也就是说,所有行其实指向同一个子列表,当你修改res[i][j]时,所有行的第j列都会被同步修改。这就是测试用例中两行结果完全相同的原因。

修正方式:用列表推导式生成独立的行,确保每一行都是全新的列表:

res = [[0] * (n-2) for _ in range(n-2)]

2. 最大值初始化的潜在问题

findMax函数中maxVal初始化为0,如果输入矩阵包含负数,这个初始值会导致错误(比如所有元素都是负数时,最大值会被错误保留为0)。建议从当前3x3区域的第一个元素开始初始化,同时函数内使用传入的mat参数而非直接引用全局的grid,保持函数独立性:

def findMax(i:int, j:int, mat: list[list[int]]) -> int:
    maxVal = mat[i][j]  # 从区域第一个元素开始初始化
    for r in range(i, i+3):
        for c in range(j, j+3):
            maxVal = max(maxVal, mat[r][c])
    return maxVal

修正后的完整代码

def largestLocal(grid: list[list[int]]) -> list[list[int]]:
    n = len(grid[0])
    # 修正结果矩阵初始化方式
    res = [[0] * (n-2) for _ in range(n-2)]
    
    def findMax(i:int, j:int, mat: list[list[int]]) -> int:
        maxVal = mat[i][j]
        for r in range(i, i+3):
            for c in range(j, j+3):
                maxVal = max(maxVal, mat[r][c])
        return maxVal
    
    for i in range(0, n-2):
        for j in range(0, n-2): 
            res[i][j] = findMax(i, j, grid)

    return res

测试验证

用你的测试用例[[9,9,8,1],[5,6,2,6],[8,2,6,4],[6,2,2,2]]测试,修正后的代码会返回预期结果[[9,9],[8,6]]。

内容的提问来源于stack exchange,提问作者tj07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 13:46:21