LeetCode第6292题-子矩阵元素加1-python实现-图解思路与手撕代码

LeetCode第6292题-子矩阵元素加1-python实现-图解思路与手撕代码


一、题目描述

在这里插入图片描述

二、解题思路与代码实现

1.解题思路

这道题需要对一个数组从左上角(r1, c1)到右下角(r2, c2)的区域做加一操作,本题采用差分矩阵的方法解题。

创建差分矩阵diff和复原矩阵res,对于差分矩阵,只需要对左上加一,右上和左下减一,右下加一即可,即:

(r1, c1)加一。
(r2+1, c1)减一,(r1, c2+1)减一。
(r2+1, c2+1)加一

从差分矩阵复原的等式如下:

res[i+1][j+1]=res[i+1][j]+res[i][j+1]-res[i][j]+diff[i][j]

其他还有一些细节需要注意,Python二维数组的创建及遍历、数组维数改变等等。

2.代码实现

代码如下(示例):

class Solution:
    def rangeAddQueries(self, n: int, queries: List[List[int]]) -> List[List[int]]:
        diff=[[0]*(n+1) for _ in range(n+1)]
        for r1,c1,r2,c2 in queries:
            diff[r1][c1]+=1
            diff[r2+1][c1]-=1
            diff[r1][c2+1]-=1
            diff[r2+1][c2+1]+=1
        res=[[0]*(n+1) for _ in range(n+1)]
        for i,arr in enumerate(diff[:n]):
            for j,num in enumerate(arr[:n]):
                res[i+1][j+1]=res[i+1][j]+res[i][j+1]-res[i][j]+num
        del res[0]
        for arr in res:
            del arr[0]
        return res

总结

本题重点在于差分数组和二维数组的操作处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值