前缀和算法模板

一维前缀和

算法用途:快速求出数组中某一连续区间的和

一维前缀和算法模板

1、预处理出一个 dp 数组

要求原数组存储在 n + 1 的空间大小中,其中后 n 个空间存数据。

dp数组,数组开 n + 1个空间,dpi 表示 1, i 区间内所有元素的和

处理方法: dp i = dp i - 1 + arr i

2、使用前缀和数组

**区间 l 到 r 的和:**sum = dp r - dp l - 1

复杂度分析

处理前缀和数组,需要 O(N) 的空间复杂度和空间复杂度,求一次区间 l 到 r 的和,需要 O(1) 的时间复杂度,如果需要求 q 次和,则时间复杂度就是 O(q) + O(N)

二维前缀和

算法用途:快速求出某个子矩阵的和

二维前缀和算法模板

1、预处理出一个 前缀和矩阵(二维数组 dp)

假设原矩阵有 m 行,n列,那么这个前缀和矩阵的二维数组 dp 要开 m+1 行, n+1 列的空间,第一行,第一列的数据都为 0, dp i j 表示 1, i 行, 1, j 列包含的这个矩阵的数据和

处理方法: dp i j = dp i - 1 j + dp i j - 1 - dp i - 1 j - 1 + arr i j

2、使用前缀和矩阵

x1, y1 ~ x2, y2 = dp x2, y2 - dp x1- 1 y2 - dp x2 y2 - 1 + dp x1 y1

二维数组前缀和的建立和使用图解

相关推荐
佳児素花痴╮2 分钟前
C++速通2
开发语言·c++·算法
麻瓜code27 分钟前
【LeetCode】相交链表:双指针法,一次遍历找到交点
算法·leetcode·链表
charlie11451419136 分钟前
浅谈C++的列表初始化std::initializer_list
开发语言·数据结构·c++·list·开源项目
zander2581 小时前
LeetCode 5. 最长回文子串
算法
hanlin032 小时前
刷题笔记:力扣第84题-柱状图中最大的矩形
笔记·算法·leetcode
青少儿编程课堂3 小时前
威佐夫博弈(双堆取子游戏)解析
c++·python·算法·bfs·信息学竞赛
一个初入编程的小白4 小时前
数据结构:二叉树链式结构的实现
数据结构
辰烨chenye7 小时前
LeetCode Hot 100 题解 · 普通数组篇
算法·leetcode·职场和发展
hqyjzsb10 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye10 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode