前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >​LeetCode刷题实战304:二维区域和检索 - 矩阵不可变

​LeetCode刷题实战304:二维区域和检索 - 矩阵不可变

作者头像
程序员小猿
发布于 2021-07-06 08:00:43
发布于 2021-07-06 08:00:43
21800
代码可运行
举报
文章被收录于专栏:程序IT圈程序IT圈
运行总次数:0
代码可运行

算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 二维区域和检索 - 矩阵不可变,我们先来看题面:

https://leetcode-cn.com/problems/range-sum-query-2d-immutable/

示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
给定 matrix = [
  [3, 0, 1, 4, 2],
  [5, 6, 3, 2, 1],
  [1, 2, 0, 1, 5],
  [4, 1, 0, 1, 7],
  [1, 0, 3, 0, 5]
]

sumRegion(2, 1, 4, 3) -> 8
sumRegion(1, 1, 2, 2) -> 11
sumRegion(1, 2, 2, 4) -> 12

解题

不看官方题解不知道,二维前缀和,了不起了不起。

优秀代码

时间最优

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

class NumMatrix:


def __init__(self, matrix: List[List[int]]):
if not matrix:
return
m = len(matrix)
n = len(matrix[0])
self.p = [[0] * (n+1) for _ in range(m+1)]
for i in range(1, m+1):
for j in range(1, n+1):
self.p[i][j] = matrix[i-1][j-1] + self.p[i-1][j] + self.p[i][j-1] - self.p[i-1][j-1]


def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
return self.p[row2+1][col2+1] - self.p[row1][col2+1] - self.p[row2+1][col1] + self.p[row1][col1]

空间最优

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

class NumMatrix:


def __init__(self, matrix: List[List[int]]):
self._matrix = matrix




def sumRegion(self, row1: int, col1: int, row2: int, col2: int) -> int:
result = 0
"""
        for row in self._matrix[row1:row2+1]:
            for col in row[col1:col2+1]:
                result += col
        """
for i in range(row1, row2+1):
for j in range(col1, col2+1):
result += self._matrix[i][j]
return result

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员小猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode刷题实战308:二维区域和检索 - 可变
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/07/06
3970
LeetCode *304. 二维区域和检索 - 矩阵不可变(前缀和)
提示: 你可以假设矩阵不可变。 会多次调用 sumRegion 方法。 你可以假设 row1 ≤ row2 且 col1 ≤ col2 。
SakuraTears
2022/01/13
1610
LeetCode *304. 二维区域和检索 - 矩阵不可变(前缀和)
LeetCode 304 二维区域和检索 -Go 实现
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。
王小明_HIT
2021/03/11
2700
LeetCode 304 二维区域和检索 -Go 实现
数组查询问题-LeetCode 303、304、306
给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。
算法工程师之路
2019/11/26
5020
304. 二维区域和检索 - 矩阵不可变
给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2) 。 这个的话考察二维前缀和公式: sum[i]
CaesarChang张旭
2021/06/01
3300
304. 二维区域和检索 - 矩阵不可变
【一天一道Leetcode】矩阵不可变
计算f(i,j)只需要对矩阵matrix的最上边的行或最左边的列分别计算前缀和即可。
潘永斌
2021/03/09
3380
Golang Leetcode 304. Range Sum Query 2D - Immutable.go
版权声明:原创勿转 https://blog.csdn.net/anakinsun/article/details/89055108
anakinsun
2019/04/12
3980
LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
1. 题目 2. 解题 dp[i][j]数组表示 从左上角到i,j位置的所有和 class NumMatrix { vector<vector<int>> sum; public: Nu
Michael阿明
2020/07/13
4020
LeetCode 304. 二维区域和检索 - 矩阵不可变(DP)
LeetCode 0304 - Range Sum Query 2D - Immutable
Given a 2D matrix matrix, find the sum of the elements inside the rectangle defined by its upper left corner (row1, col1) and lower right corner (row2, col2).
Reck Zhang
2021/08/11
2250
LeetCode 0304 - Range Sum Query 2D - Immutable
LeetCode 304. Range Sum Query 2D - Immutable
题目 二维的,那就二维前缀和数组 class NumMatrix { public: int prefix[1005][1005]; NumMatrix(vector<vector<int>>& matrix) { memset(prefix,0,sizeof(prefix)); for(int i=0;i<matrix.size();i++) { for(int j=0;j<matrix[i].siz
ShenduCC
2020/06/04
3360
Leetcode模块训练3
1. 统计(优美子数组)(1048) 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字, 我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数目。 示例 1: 输入:nums = [1,1,2,1,1], k = 3 输出:2 解释:包含 3 个奇数的子数组是 [1,1,2,1] 和 [1,2,1,1] 。 示例 2: 输入:nums = [2,4,6], k = 1 输出:0 解释:数列中不包含任何奇数,所以不存在优美子数组。 示例
素履coder
2023/03/23
4440
leetcode——数组算法——前缀和构建和应用
1.在sumRange里面,for循环从left到right遍历nums,用一个变量记录。
小薛cOde
2024/02/13
1180
leetcode——数组算法——前缀和构建和应用
力扣(LeetCode)刷题,简单+中等题(第32期)
力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。
不脱发的程序猿
2021/05/08
3050
力扣(LeetCode)刷题,简单+中等题(第32期)
LeetCode 第 28 场双周赛(505/2144,前23.6%)
全国排名: 505 / 2144,23.6%;全球排名: 1944 / 8571,22.7%
Michael阿明
2020/07/13
3850
LeetCode 第 28 场双周赛(505/2144,前23.6%)
​LeetCode刷题实战62:不同路径
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3120
​LeetCode刷题实战62:不同路径
Python3刷题系列(十)
动态规划,回溯法,广度优先搜索(DFS) 目录: 1,Leetcode-416 2,Leetcode-17 3,Leetcode-64 4,Leetcode-70 5,Leetcode-279 6,Leetcode-695 7,Leetcode-343 8,Leetcode-583 9,Leetcode-303 10,Leetcode-300 11,Leetcode-309 1,Leetcode-416: # leetcode-416:动态规划, beats 56.04% class Solution:
用户5473628
2019/08/08
3210
​LeetCode刷题实战77:组合
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3600
​LeetCode刷题实战77:组合
LeetCode笔记:Weekly Contest 289
这一题思路也简单,首先就是统计一下各个难度的频次,显然如果有难度的频次为1,那么它永远无法被完成,返回-1就行了。
codename_cys
2022/05/07
1700
LeetCode 63、64 动态规划两题连刷,移动坐标的小技巧
今天是LeetCode的37篇,趁着周末,开始我们愉快的刷题。今天要刷的题目是LeetCode 63和64两题,分别是Unique Paths II和Minimum Path Sum。
TechFlow-承志
2020/05/25
6650
LeetCode 63、64 动态规划两题连刷,移动坐标的小技巧
打卡群刷题总结0721——搜索二维矩阵
链接:https://leetcode-cn.com/problems/search-a-2d-matrix
木又AI帮
2020/07/23
2730
相关推荐
​LeetCode刷题实战308:二维区域和检索 - 可变
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文