首页 > 其他 > 详细

力扣刷题之二维区域和检索 - 矩阵不可变

时间:2021-03-04 23:11:01      阅读:26      评论:0      收藏:0      [点我收藏+]

题目链接:https://leetcode-cn.com/problems/range-sum-query-2d-immutable/

这个是

这道题的解题思路是分别求一维数组的前缀和,然后再求二位数组中指定区域的和。

具体实现方面,创建 m 行 n+1 列的二维数组sums,其中 m和 n分别是矩阵matrix 的行数和列数,sums[i] 为matrix[i] 的前缀和数组。将sums 的列数设为n+1 的目的是为了方便计算每一行的子数组和,不需要对 col1? =0 的情况特殊处理。

c++代码如下:

class NumMatrix {
public:
    vector<vector<int>> sums;
    NumMatrix(vector<vector<int>>& matrix) {
        int m=matrix.size();
        if(m>0)
        {
            int n=matrix[0].size();
            sums.resize(m,vector<int>(n+1));
            for(int i=0;i<m;i++)
            {
                //计算每一行的前缀和
                for(int j=0;j<n;j++)
                    sums[i][j+1]=sums[i][j]+matrix[i][j];
            }
        }

    }
    
    int sumRegion(int row1, int col1, int row2, int col2) {
        int sum=0;
        //按行计算指定区域和并相加得到最终结果
        for(int i=row1;i<=row2;i++)
            sum+=sums[i][col2+1]-sums[i][col1];
        return sum;

    }
};

 

力扣刷题之二维区域和检索 - 矩阵不可变

原文:https://www.cnblogs.com/justloving/p/14483237.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!