算法技巧
文章平均质量分 71
hbvfhb
这个作者很懒,什么都没留下…
展开
-
递归使用细节
递归1.表现递归的表现很简单,就是方法套方法2.使用时机出现一个状态可以转移到另一个状态的场景(状态可以是一个节点,一个问题的抽象定义等等),并且这些状态可以使用同一个方法(步骤),(比如走迷宫同一个点使用的走法一样,再比如遍历树用一个节点遍历方式一样,等等),那么就可以使用递归。3.细节实现细节是:该递归方法的参数和返回值。何时进入下一个状态。何时返回上一个状态。...原创 2022-01-11 15:23:28 · 182 阅读 · 0 评论 -
线段树概念和使用技巧
线段树概念和使用技巧1.概念线段树概念可以查看博客线段树详解 (原理,实现与应用)_岩之痕-CSDN博客_线段树和书籍《算法竞赛进阶指南》-李煜东。2.使用技巧线段树可以方便的查找任一区间的统计值;这么说还有点含糊。本质上是,我们需要:每次根据一系列点[X1,X2,…,Xn]的值[f(X1),f(X2),…,f(Xn)]来得到某些值a,b,c,…。并且支持更新一系列点[x1,x2,…,xn]的值f(x)。求值a,b,c…满足区间可加性。当然上面说的一系列点也可以是一个。其实只想实现上原创 2021-08-19 20:11:59 · 212 阅读 · 0 评论 -
并查集概念和使用技巧
并查集概念和使用技巧1.概念并查集常用来维护一些集合,每个集合中的任意两元素都满足某个条件x,并且条件x是一个传递性条件。支持查询**find()和合并2个集合union()**的操作,经过优化后的并查集完成上述操作的时间复杂度近似位O(1)。即:一个集合中的元素都满足某个传递性条件,如果a集合中某个元素和b集合中某个元素满足上传递性条件,则集合a,b合并为一个集合。例子:nums = [1,2,2,1,3,1]假如此时要将nums中相等的元素分到一个集合中去,显然“两元素相等”就是一个传递性条件原创 2021-08-13 17:40:15 · 360 阅读 · 0 评论 -
常用低复杂度算法和数据结构
常用低复杂度算法和数据结构1.查找无序序列中第K大的数:快速查找算法 O(n)。2.找到序列中的逆序对:归并排序 O(nlogn)3.查找序列中的最长递增子序列:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。贪心算法+二分查找 O(nlogn)4.查找2个序列的最长公共子序列:输入:text1 = "abcde", text2 = "agcafe" 输出:3 解释:最长公共子序列是 "ac原创 2021-07-30 17:22:39 · 702 阅读 · 0 评论 -
二分多分概念和技巧
二分/多分概念和技巧1.概念二分/多分是通过两个或者多个变量,将大的问题依次转成小的问题求解,降低时间复杂度。本质上是分治法的思想,不同点是分治可以将问题分为多个小问题,而二分/多分是将问题转成一个小问题。如何正确的写对二分需要注意某些细节。2.二分适用情况双指针的适用问题,双指针本质上也是二分思想。有序序列,或者部分有序序列上的查找。三分求单峰或者单谷函数的极值点。3.二分实现二分查找本质上就是找一个数,这个数满足某个函数,把这个函数叫做valid();有时候满足valid()函数原创 2021-07-30 13:29:43 · 781 阅读 · 0 评论 -
状压dp概念和使用技巧
状压dp概念和使用技巧1.概念状压就是用一个N进制整数,表示一个状态。比如:1:有一个序列[A,B,C,D],序列中的每个元素可以拿或者不拿。则一共有2^4种方式,可以用一个4位的2进制整数来表示每一种方式(状态)。整数6[0110]表示拿了B,C整数1[0001]表示拿了A整数15[1111]表示都拿了2:有一些人[a,b,c,d],每个人可以拿0,1,2个苹果。则一共有3^4种方式,可以用一个4位的3进制数来表示每一种方式(状态)。整数3表示的3进制数为[0010],表示只有b拿原创 2021-07-20 18:49:52 · 763 阅读 · 0 评论 -
单调队列概念和技巧
单调队列概念和技巧总结单调队列适合在数组/集合中,求滑动窗口的最值问题。1.概念单调队列相比单调栈,不同点就是利用第一种实现方式的单调栈,并接受删除栈底的数;表现为可以在队列尾部插入和删除数据(同第一种单调栈栈顶操作),并且可以在队列头部删除数据。2.实现单调栈主要用来找出一个滑动窗口中的最值。所以对于原数组中的每一个值,都会在队列尾部进行进队操作,进队操作和单调栈的进栈操作一样。当队列头部的元素已经不属于该窗口时就将该元素从头部删除。例子:找出每一个窗口中的最小值——构建一个单调递增队列原创 2021-07-15 15:51:59 · 92 阅读 · 0 评论 -
单调栈概念与技巧
单调栈概念与技巧总结(1)总的来说,单调栈适合一些求解过程或者求解出的结果明显的呈现出V或者形式的问题,这种类型的问题可以考虑使用单调栈。**(可以考虑是指,按照这个特点使用单调栈不一定能绝对完成任务),**总之能用单调栈解决的问题一定符合v,,但是符合v,^形式的问题,不一定能用单调栈,的具体问题具体分析(但是大部分都可以)。(2)求数组中一个元素的两端最近的大于或者小于该元素的元素(即左边最近的小于/大于它的元素,右边最近的小于/大于它的元素),可以求两端,当然只求一端也可以完成。——适用于第一种原创 2021-07-14 22:27:09 · 131 阅读 · 0 评论