力扣每日一题-2373矩阵中的局部最大值 python一行

力扣每日一题-2373矩阵中的局部最大值 python一行解析

题目

矩阵中的局部最大值

思路

  1. 利用python里面的生成器可以快速解决这个问题
  2. 首先我们要生成一个矩阵,这个矩阵里面的元素个数为 ( n − 2 ) × ( n − 2 ) (n-2)\times(n-2) (n2)×(n2)个,我们可以先写一个生成器
[[ max(F(grid(i, j)) for y in range(1, len(grid) - 1)] for x in range(1, len(grid) - 1)]

注意,这里的 F ( g r i d ( i , j ) ) F(grid(i, j)) F(grid(i,j))用来表示以 ( i , j ) (i, j) (i,j)为中心的局部矩阵,无法直接运行,这样我们可以构造出一个答案所需要的二维矩阵的结构,下一步我们要找到这个局部矩阵 F ( g r i d ( i , j ) ) F(grid(i, j)) F(grid(i,j))
3. 接着,我们构造局部矩阵,按照题目意思,局部矩阵即当前中心左上到右下角的所有元素顺序构成的一个二维矩阵,所以不难发现可以这样构造局部矩阵 F ( g r i d ( i , j ) ) F(grid(i, j)) F(grid(i,j))

[grid[i][j] for i in range(x-1, x+2) for j in range(y-1, y+2)]

这样其实我们直接得到了上述局部矩阵的一维展开形式
4. 我们对这个列表求最值,可以得到我们需要的局部矩阵的最值,最后把这些最值放入最开始生成的二维列表中即得到题目所需

代码

class Solution:
    def largestLocal(self, grid: List[List[int]]) -> List[List[int]]:
        return([[max([grid[i][j] for i in range(x - 1, x + 2) for j in range(y - 1, y + 2)]) for y in range(1, len(grid) - 1)] for x in range(1, len(grid) - 1)])

总结

  1. 一行解决问题有时候并不是最开始就用一行的思想,而是一步一步写出解答最后简化过程,比如这题先找到的其实是局部矩阵,然后对矩阵展开,然后求最值,最后构造二维矩阵。
  2. 写项目时尽量不要这样写,降低了可读性,这样主要是为了锻炼下思维。

以上, 共勉

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值