首页 > 其他分享 >前缀和数组技巧 [labuladong-刷题打卡 day3]

前缀和数组技巧 [labuladong-刷题打卡 day3]

时间:2023-08-03 15:11:18浏览次数:83  
标签:row matrix int sums day3 vector 打卡 labuladong 前缀

今天是两道前缀和,主要有一维前缀和和二维前缀和,当然扩充到高维也是可以的,只不过状态转移会相对复杂些。
这里直接贴一个动态规划的介绍吧:
动态规划要素
动态规划概念、特点、经典例题和于其它算法思想的比较
前缀和其实是备忘录自底向上动态规划算法的一个典型例子,状态转移方程:
一维:sums[i]=sums[i-1]+nums[i]
二维: sums(i,j)=sums(i−1,j)+sums(i,j−1)−sums(i−1,j−1)+matrix[i][j]

这里直接贴一个二维题解:
304. 二维区域和检索 - 矩阵不可变

class NumMatrix {
private:
    vector<vector<int>> preSum;
public:
    NumMatrix(vector<vector<int>>& matrix) {
        int row=matrix.size();
        if(row==0) return;
        int col=matrix[0].size();
        preSum.resize(++row,vector<int>(++col));
        for(int i=1;i<row;i++){
            for(int j=1;j<col;j++){
                preSum[i][j]=preSum[i-1][j]+preSum[i][j-1]-preSum[i-1][j-1]+matrix[i-1][j-1];
            }
        }
    }
    
    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];
    }
};

标签:row,matrix,int,sums,day3,vector,打卡,labuladong,前缀
From: https://www.cnblogs.com/alanjiang/p/17603406.html

相关文章

  • 8.1打卡
    L1-087机工士姆斯塔迪奥#include<bits/stdc++.h>usingnamespacestd;intmain(){intN,M,Q;cin>>N>>M>>Q;intsum=0;inta[N][M];memset(a,0,sizeof(a));for(intk=1;k<=Q;k++){intT,C;cin>>T>>C......
  • 7-31打卡
    矩阵快速幂求斐波那契数列快速幂将指数n表示成二进制形式。从二进制的最低位开始遍历,如果当前位为1,则累乘底数x;否则,不进行任何操作。将底数x不断平方,并更新指数n为n的一半。重复步骤2和步骤3,直到遍历完整个二进制表示。publicclassFibonacciMatrix{publicstaticvo......
  • 8-1打卡
    定义方式:接口:使用interface关键字定义,接口中可以包含抽象方法、默认方法(Java8及以后版本支持)、静态方法(Java8及以后版本支持)和常量(默认是publicstaticfinal修饰的)。抽象类:使用abstract关键字定义,抽象类可以包含抽象方法和普通方法,可以有构造方法和成员变量。继承:Java接口......
  • 链表双指针技巧汇总 [labuladong-刷题打卡 day1]
    双指针合并21.合并两个有序链表比较简单的双指针比较算法,两个指针分别指向待合并链表/序列,比较后选择符合条件的指针移动Trick:链表在实现时,带头节点的链表在操作中更方便题解/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNo......
  • 7.31打卡
    L1-077大笨钟的心情#include<bits/stdc++.h>usingnamespacestd;intmain(){inta[24];for(inti=0;i<24;i++){cin>>a[i];}intn;for(;;){cin>>n;if(n<0||n>23){break;}el......
  • day3
    面向对象进阶1.static表示静态,可以修饰成员方法、成员变量静态变量staticStringteacherName;调用方式:类名调用(推荐)对象名调用静态变量随着类的加载而加载,优先于对象出现的,不属于对象,属于类静态方法多用在测试类和工具类中Javabean类中很少会用调用方式:类名调用......
  • 7.30打卡
    L1-064估值一亿的AI核心代码#include<bits/stdc++.h>usingnamespacestd;boolIf(charop)//判断op是否为符号{if(op=='0')returnfalse;if(op>='a'&&op<='z')returnfalse;if(op>=......
  • 大道至简读后感_730打卡
    刚刚读完了周爱民的大道至简,收获颇丰,感慨万千。首先先说一下软件工程这个专业,软件工程不同于计算机科学,般来说,软件工程更注重软件的开发和管理,而计算机科学更注重计算机的理论和原理。具体来说,软件工程关注的是软件的开发、维护和管理过程,强调将工程原理应用于软件开发,以提高软件......
  • 7.29打卡
    L1-059敲笨钟#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn,a,b; stringstr; cin>>n; getchar(); for(inti=0;i<n;i++){ getline(cin,str); if(str.find("ong,")!=-1&&str.find("ong.")!=-......
  • day3c++学习
    1内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收......