美文网首页
前缀和 03

前缀和 03

作者: 眼若繁星丶 | 来源:发表于2021-03-02 10:32 被阅读0次

前缀和 03

6FmqOO.png

思路:

方法一:暴力

模拟一遍就可以了,java勉强能过,5%而已。

class NumMatrix {

    private int[][] grid;

    public NumMatrix(int[][] matrix) {
        if (matrix == null || matrix.length == 0) return;
        grid = new int[matrix.length][matrix[0].length];
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                grid[i][j] = matrix[i][j];
            }
        }
    }
    
    public int sumRegion(int row1, int col1, int row2, int col2) {
        int sum = 0;
        for (int i = row1; i <= row2; i++) {
            for (int j = col1; j <= col2; j++) {
                sum += grid[i][j];
            }
        }
        return sum;
    }
}

方法三:二维前缀和

  • 第一点,初始化前缀和数组,根据下图原理从左上角一直遍历到右下角,完成初始化
image
\operatorname{preSum}[i+1][j+1]=\operatorname{preSum}[i][j+1]+\operatorname{preSum}[i+1][j]-\operatorname{preSum}[i][j]+\operatorname{matrix}[i][j]
  • 第二点,根据前缀和数组来求任意子矩阵面积
image
\text { preSum }[\text { row } 2][\text { col } 2]-\text { preSum }[\text { row } 2][\operatorname{col} 1-1]-\text { preSum }[\text { row } 1-1][\text { col } 2]+\text { preSum }[\text { row } 1-1][\operatorname{col} 1-1]

图源来自https://leetcode-cn.com/problems/range-sum-query-2d-immutable/solution/ru-he-qiu-er-wei-de-qian-zhui-he-yi-ji-y-6c21/

public class NumMatrix {

    private int[][] preSum;

    public NumMatrix(int[][] matrix) {
        if (matrix == null || matrix.length == 0) return;
        int m = matrix.length;
        int n = matrix[0].length;
        preSum = new int[m + 1][n + 1]; // 表示矩阵区域 (0,0)->(m,n) 元素总和
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                preSum[i + 1][j + 1] = preSum[i][j + 1] + preSum[i + 1][j] - preSum[i][j] + matrix[i][j];
            }
        }
    }

    public int sumRegion(int row1, int col1, int row2, int col2) {
        return preSum[row2 + 1][col2 + 1] - preSum[row1][col2 + 1] - preSum[row2 + 1][col1] + preSum[row1][col1];
    }

}

相关文章

  • 前缀和 03

    前缀和 03 [https://imgtu.com/i/6FmqOO] [https://leetcode-cn....

  • trie、桶排序、排序总结

    Code01_TrieTree 前缀树 Code02_TrieTree Code03_CountSort Code...

  • 前缀和

    560.和为K的子数组 算出一共有几个和为 k 的子数组。这里用到了前缀和数组。 注意以下几点: 前缀和数组第0号...

  • 前缀和

    什么是前缀和 简单来说:我们有一个数组x和它的前缀和数组y,他们满足以下公式。y 0 = x 0y 1 = x 0...

  • 前缀和

    [TOC] 前缀和基础原理 基础模板 关键规律 从 i 到 j 的元素和 = prefixSum[j+1] – p...

  • 一些用前缀思想解决的题(持续完善)

    有前缀和, 前缀GCD, 前缀奇数个数, 前缀偶数个数, 前缀差, 等等, 都要根据自己的思想来去解决!!!,前缀...

  • 左右两边子数组的和相等

    前缀和

  • 前缀和后缀

    #include void main() { int a = 1, b = 1; int aplus = ...

  • 前缀和(持续)

    写在前面:(2020-2-12)发现之前学习的一些算法忘了很多,准备最近在洛谷上找一些基础的题目做一做,熟悉一下这...

  • 前缀和算法

    1,什么是前缀和算法 前缀和算法是一种重要的预处理算法,能大大降低查询的时间复杂度。最简单的题目就是:给定n个数和...

网友评论

      本文标题:前缀和 03

      本文链接:https://www.haomeiwen.com/subject/lsetqltx.html