码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【优选算法精品】前缀和


    文章目录

    • 一、前缀和
      • 前缀和问题
      • 一维前缀和模板
      • 二维前缀和模板
    • 细节处理
    • 题目1
      • 思路
      • 细节处理:
    • 题目2
      • 思路
    • 题目3
    • 题目4
    • 题目5
    • 题目6
    • 总结


    一、前缀和

    前缀和问题

    前缀和用来快速解决某一段连续区间的和。

    时间复杂度O(1)

    注意:不要背模板,不要背模板,不要背模板!!!

    一维前缀和模板

    • 1)预处理一个前缀和数组

      • 针对本道题:前缀和模板
      • dp[i] = dp[i-1] + arr[i];
        dp[i]表示:从[1,i]连续区间内所有元素的和。
    • 2)使用前缀和解决问题


    重点:不要背模板,不要背模板,不要背模板!!!

    每道题的情况不同,唯一相同的是前缀和思想,利用这个思想求一段连续区间内所有元素的和即可。

    二维前缀和模板

    二维前缀和

    以该题为例:

    利用二维前缀和数组的思想:
    dp[i][j]表示:从[1,1]坐标开始到[i,j]坐标结束,这段连续区间内所有元素的和。

    dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1]
    
    • 1

    细节处理

    由于i应该要从1开始,所以当i = 0时,会越界,这里可以多开一个空间,并保证空间的初始化不会影响后续的结果。

    题目1

    寻找数组的中心下标

    思路

    使用一维前缀和的思想,假设
    [0~i-1]区间的所有元素的和 = f[i];
    [i+1,n-1]区间的所有元素的和 = g[i];

    f[i] = f[i-1] + arr[i-1];
    g[i] = g[i+1] + arr[i+1];

    细节处理:

    • f[0] = 0,g[n-1] = 0
      因为这种边界情况会越界
      f从左到右开始求和
      g从右到左求和

    题目2

    除自身以外数组的乘积

    思路

    与题目一思路几乎一样。

    在这里插入图片描述

    题目3

    和为 K 的子数组

    这道题上强度了,难度比较大,我是看了解析看了三遍才弄懂它的思路。

    在这里插入图片描述

    题目4

    和可被 K 整除的子数组

    这道题的整体思路与上一道题的思路也是几乎相同。

    主要区别就是这道题要引入一个数学定理。

    还有一个在c++和java两个语言中,负%正=负;这个问题在本道题中需要进行修正。

    其他细节问题一样的。
    在这里插入图片描述

    题目5

    连续数组

    解题思路:

    在这里插入图片描述

    题目6

    矩阵区域和

    这道题是一个二维前缀和,难度还是挺大的,不过只要把思路捋清楚,多花点时间也是可以的。

    在这里插入图片描述


    总结

    这篇文章是关于前缀和的题目解题思路以及一些模板,还是那句话,不要背模板。

  • 相关阅读:
    技术门槛高?来看 Intel 机密计算技术在龙蜥社区的实践
    Spring Boot 2(一):【重磅】Spring Boot 2.0权威发布
    3.二叉树遍历序列还原
    工程制图直线投影练习
    基于SSM滑雪场预约管理系统设计与实现
    uniapp 结构
    [含lw+源码等]SSM房屋租赁系统|房屋出租|房产中介[包运行成功]
    CSDN App 2022上半年-栉风沐雨谨慎前行
    只依赖OPENCV的工作服安全帽检测YOLOV8S
    mysqldump和XBK备份
  • 原文地址:https://blog.csdn.net/w2915w/article/details/134056497
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号