首页 > 其他分享 >刷题总结——区间和

刷题总结——区间和

时间:2024-10-31 13:01:30浏览次数:1  
标签:总结 https LC 差分 数组 区间 刷题 前缀

前缀和

前缀和是一种解决区间求和问题的辅助方法,前缀和只适用于固定区间(数组、树等),如果区间元素发生变化,则不适用,此时需要考虑树状数组、线段树等方式。

问题类型

常见的问题也是和DP一样,求最大/最小/方案数。

类型 题目 备注
前缀和+哈希 LC 560 两数之和 思路
前缀和+二分 LC 2389 利用前缀和数组单调非递减
距离和 LC 2602 数学计算
异或前缀和 LC 1310 求的是异或前缀和,表示异或结果
二维前缀和 LC 304 表示以某个元素坐标为对角线的矩形
树前缀和 LC 437 利用hash

思考

  • 前缀和通常留一个presum[0]的特例,用来避免特殊情况的判断。
  • 区分正整数子序列问题(无顺序要求,可以排序之后求前缀和进行划分)和子数组(连续,只能使用滑动窗口划分),如2389
    • 前缀和与子数组的关系:前缀和本身就是一个子数组(从0开始),前缀和之差也是一个子数组
    • 前缀和与子序列的关系:前缀和表示了一个特定子序列的和
  • 正整数前缀和数组往往是单调非递减的,可以使用二分来优化
  • 一种瞬间检查所有子数组和的方法(two sum思路): 对每个前缀使用hash检查,并且把前缀加到hash中,这种方式可以在一次遍历过程中添加
  • 注意与DP的联系:一些用前缀和求最大子数组/子序列的问题涉及到如何选择下标,可以使用前缀和解决,如LC 53和LC 221

差分

差分数组指的是数组中每个值后减前作差得到的结果
性质:

  • 差分数组,从左至右累加O(n),可以得到原始数组对应位置的值。
  • 对于连续子数组所有元素的操作,等于对差分数组中连续子数组左右区间端点的操作(因为对于连续子数组内部,差分不变)
    • 利用这个性质,可以实现O(1)时间的区间操作,即区间操作转换成2个单点操作
    • 结合上一性质,可以方便地复原出原始数组
      类比:
  • 差分数组:微分
  • 前缀和:积分

题目

考虑上下车问题及其变体 LC 253,LC 370

树状数组

树状数组适合于经常进行原始数据修改的区间和问题,它可以把查找变成对数的时间复杂度。

树状数组3个核心函数:lowbit/query/add

  • 求前缀和的时候query一下左右边界
  • query的时候使用lowbit
  • add的时候使用lowbit

题目

LC 307 模版题

线段树

略(可参考后面的资料4.)

参考资料

  1. https://leetcode.cn/circle/discuss/mOr1u6/
  2. https://leetcode.cn/problems/range-sum-query-mutable/solutions/632515/guan-yu-ge-lei-qu-jian-he-wen-ti-ru-he-x-41hv
  3. https://lfool.github.io/LFool-Notes/algorithm/前缀后缀法.html
  4. https://lfool.github.io/LFool-Notes/algorithm/线段树详解.html
  5. https://blog.csdn.net/qq_40941722/article/details/104406126

标签:总结,https,LC,差分,数组,区间,刷题,前缀
From: https://www.cnblogs.com/hesun/p/18517489

相关文章

  • 今日总结
    《程序员修炼之道:从小工到专家》前半本书读后感在踏入编程世界的旅途中,《程序员修炼之道:从小工到专家》如同一盏明灯,照亮了我前行的道路。这本书不仅是一部技术指南,更是一次心灵的启迪,让我对程序员这一职业有了更为深刻的理解和认识。初读前半部分,我被书中对程序员成长路径的细......
  • 程序员修炼之道总结3
    第11节:原型与便笺核心理念:原型是验证项目流程和场景可行性的工具。启发:关注原型制作过程中的学习经验,而非最终产品,利用简单工具如便笺进行原型设计,以减少开发初期的资源投入。第12节:领域语言核心理念:领域特定语言(DSL)可以帮助简化复杂系统的设计和开发。启发:语言的选择影响团......
  • 2024年10月30日总结
    今天下午对上午学习的哈夫曼树进行了复习,自己结合ai尝试进行了哈夫曼树的构建classHuffmanNodeimplementsComparable{chardata;//节点的数据(字符)intfrequency;//节点的频率HuffmanNodeleft,right;//左右子节点HuffmanNode(chardata,intfrequency){......
  • 代码随想录算法训练营day31| 56. 合并区间 738.单调递增的数字
    学习资料:https://programmercarl.com/0056.合并区间.html#算法公开课贪心PART5over学习记录:56.合并区间(也是找重叠区间,但是是跟result[-1]比,只用比右边界;更新result[-1][1]为更大值)点击查看代码classSolution(object):defmerge(self,intervals):"""......
  • 模拟赛总结(四)(终章?)
    2024.10.30T1追逐游戏(chase)被自己的分讨绕死了,以后要学会简化codeT2统计codeT3软件工程选前\(k-1\)长的+剩下求交集可得\(96\)~~为什么我贪的不对qwq~~把这个贪心改成大炮就是整洁的一部分定义\(dp_{i,j}\)表示前\(i\)条线段放到\(j\)个集合里,那么上述方法......
  • 区间推平,区间查询循环节
    区间推平,区间查询循环节题意给定一个字符串\(s\),请你支持两种操作:\(1,l,r,c\):将\([l,r]\)之间的字符改为\(c\)。\(2,l,r,d\):询问\([l,r]\)之间是否有长度为\(d\)的循环节,有输出YES,否则输出NO。思路使用线段树维护区间哈希值,区间推平使用等比数列计算。......
  • 9.24人工智能教育技术学课后总结
    一、思维导图的学习与体验在课堂上,老师详细讲解了思维导图的构成要素,包括中心主题、分支节点、连接线以及关键词等,并通过实例展示了如何构建一张清晰、有条理的思维导图。随后,我们学习了几款常用的思维导图工具,如XMind、MindNode、SimpleMind等。二、PDF转换器的应用与探索PDF......
  • 10.15人工智能教育技术学课后总结
    从教育者角度理解AI课程的开篇,老师首先为我们介绍了规则基础系统。这是一种基于明确规则和逻辑的人工智能系统,能够按照预设的条件和行动进行决策。在教育领域,规则基础系统可以被用来制定自动化的评分标准、课程安排等,从而提高教育管理的效率和准确性。紧接着,我们学习了机器学习......
  • 10.22人工智能教育技术学课后总结
    提示语设计课程伊始,老师便强调了提示语在教学中的关键作用。如何设计有效的提示语,以充分发挥技术的辅助作用,成为我们亟待解决的问题。提示语设计的原则明确性:提示语应清晰明了,让学生一目了然地知道需要做什么、怎么做。启发性:通过设计富有启发性的提示语,激发学生的好奇心和求......
  • 10.29人工智能教育技术学课后总结
    1.课程回顾2.人工智能在小学教育中的应用实例3.智能评估与反馈4.面临的挑战与展望本节课老师以人工智能技术在王力宏离婚事件中的应用引入,讲述了人工智能技术对教学的革命性作用。人工智能在小学教育中的应用实例老师提到了一个让我印象深刻的例子:通过人工智能技术,系统可以......