经典算法
文章平均质量分 91
昂昂累世士
这个作者很懒,什么都没留下…
展开
-
双指针算法与解的单调性
双指针算法因其代码的简洁和高效经常出现在常见的面试题中,做过大量的双指针问题,基本都是很快解决,于是将其当做一种简单的算法而没有去深究其中的原理。直到不久前的一场面试中竟然在做过的一道双指针的算法题上翻车了,才意识到之前并没有对双指针算法有着足够的理解。翻车的这道题是leetcode 11. 盛最多水的容器,不久前才写过题解,第一次做这道题的解法是使用单调栈+二分,而后看了官方题解才使用的双指针。而相似的求二维坐标系里面的最大面积的题有好几道,解法各不相同,有的使用单调栈,有的使用动态规划,有的使用双指针,原创 2022-07-09 15:53:32 · 623 阅读 · 0 评论 -
AcWing 241 楼兰图腾(树状数组详解)
树状数组是一种实现起来比较简单的高级数据结构。我们知道,对于一个数组a[i],其前缀和s[i]表示a数组里面前i个元素之和,而求区间l到r的元素之和可以用s[r] - s[l-1]来求。现在有个单点修改,区间查询的问题,也就是修改原始数组a中某个元素,然后查询某段区间内元素之和。暴力做法修改a中某个元素的时间复杂度是O(1),查询区间和复杂度是O(n);如果将前缀和数组利用起来,那么查询区间和操作的复杂度固然可以降为O(1),但是单次修改操作后更新前缀和数组的复杂度却是O(n)的。现在我们需要实现修改和查询原创 2022-06-21 17:20:02 · 458 阅读 · 0 评论 -
RMQ问题之ST算法
RMQ(Range Minimum/Maximum Query)问题,即区间最值问题。也就是给出一个数列A1到An,同时给出若干次查询,query(l,r),要求我们快速准确的给出该区间内数列的最值。显然,对于这种在线查询的问题,暴力情况下,n次查询,每次都要比较所给区间的元素以求出最值,复杂度是相当高的。为了优化解法,一般采用线段树区间查询或者ST算法来解决。最初接触RMQ之ST算法,是学完...原创 2019-03-30 11:26:58 · 253 阅读 · 0 评论