【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)

前缀和算法:高效处理区间求和的利器

目录

  1. 引言
  2. 什么是前缀和
  3. 前缀和的基本实现
  4. 前缀和的作用
  5. 前缀和的典型应用场景
  6. 前缀和的优缺点分析
  7. 实战例题解析

引言

  • 区间求和问题的普遍性
  • 暴力解法的时间复杂度问题
  • 前缀和算法的核心思想

什么是前缀和

  • 前缀和的数学定义

通俗来讲,前缀和就是从某个位置到最开始的所有数据的和我们可以称作前缀和

  • 一维前缀和的概念

从当前位置到数组开始的所有数据的和。

  • 二维前缀和的概念

从当前位置到矩阵和开始((0,0))构成的局部矩阵的所有元素之和。

前缀和的基本实现

前缀和的基本实现非常简单,通过简单的遍历操作就能实现。

前缀和的作用

由于前缀和表示某个位置到数组或矩阵开头的和,因此前缀和数组可以快速帮助我们获取任意区间的和。

前缀和的典型应用场景

  1. 静态数组的频繁区间查询
  2. 矩阵中的子矩阵求和
  3. 结合哈希表解决特定问题
    • 和为K的子数组个数
    • 连续子数组和整除问题
  4. 数据处理与统计应用

前缀和的优缺点分析

优点

  • 查询时间复杂度O(1)
  • 实现简单高效
  • 扩展性强

缺点

  • 需要额外O(n)空间
  • 原始数组不可变(动态数组需用其他结构)
  • 高维时空间消耗大

实战例题解析

  1. 一维例题:LeetCode LCR 010. 题目链接

    解法和思路

    本题通过hash进行记忆化存储前缀和,存储我们遍历时候当前位置之前的所有存在的前缀和,我们可以通过查找hash表判断是否存在我们需要的前缀和的值。

  2. 二维例题:LeetCode 304. 二维区域和检索 - 矩阵不可变

    解法和思路 :

    同一维思想相仿,只不过在构造的时候二维更加复杂:

  • 构建prefix(前缀和矩阵) : prefixij = prefixi - 1j + prefixij - 1 - prefixi -1j - 1 + matrixij
  • 得到任意一个矩阵的和
    Sum({i,j} -> {s,t}) = prefixst - prefixsj - 1 - prefixi - 1t + prefixi - 1j - 1
  1. 拓展例题:统计美丽子数组数目(结合位运算前缀和)
    这道题可以自行思考:leetcode上面也有对应的题解。
相关推荐
CoderYanger6 小时前
A.每日一题:1140. 石子游戏 II
java·程序人生·算法·leetcode·游戏·职场和发展·深度优先
小雨笙笙6 小时前
机器学习:评估模型与选择
人工智能·算法·机器学习
高亦真6 小时前
今天是学习嵌入式的第35天
linux·学习·算法
HugoStudio_SWAN6 小时前
洛谷 P1319 / P1320 压缩技术——同一枚硬币的正反面
c++·学习·程序人生·算法
wdfk_prog8 小时前
canopennode-rtt推荐,不只可以做从站,也可以承担主站角色
c语言·开发语言·数据库·学习·算法·深度优先
BioRunYiXue8 小时前
科研干货 | IC50全面解读:概念解析、实验设计与数据分析要点
java·开发语言·javascript·人工智能·算法·数据挖掘·数据分析
hahaha60168 小时前
HLS高层次综合设计技巧--UART_TX接收模块设计案例
人工智能·算法·计算机视觉
302wanger8 小时前
一个程序员看完《逆行人生》:电影没说透的,比电影更扎心
算法
hele_two8 小时前
C++模拟蚁群(二)
c++·算法·数学建模·图形渲染
WK100%8 小时前
LeetCode双题:滑动窗口破解最小子数组
c++·经验分享·笔记·算法