算法笔记
疯狂调bug的浩浩
别偷懒,要多记录多分享
展开
-
最长上升子序列(O(nlogn))算法并输出最长上升子序列
最长上升子序列普通算法dp[n]表示以a[n]结尾的最长上升子序列长度显然有dp[n]=max(dp[n],dp[i]+1) 满足a[i]<a[n],1<=i<n实现过程时间复杂度为O(n^2)2.O(nlogn)时间复杂度思路是用数组lower保存最长上升子序列长度,对于当前元素a[i],若大于数组lower最后一个元素,则插入lower数组。否则,用二分在l...原创 2020-04-10 17:54:30 · 3049 阅读 · 0 评论 -
最长公共子序列(O(n)空间优化、O(nlogn)时间优化)
普通算法对于求最长公共子序列,最普遍的就是时间复杂度为O(n^2),空间复杂度为O(n*n)算法。重要的是,若要求出最长公共子序列是什么,则必须使用这一种算法,具体代码如下:int dp[maxn][maxn],a[maxn],b[maxn];void LCS_common(int n,int m) { //n为数组a长度,m为数组b长度 for(int i=1;i<=n;i...原创 2020-04-10 12:29:37 · 6943 阅读 · 3 评论 -
poj 3461 (kmp算法详细解释)
题目链接kmp算法已经学过好多次了,但每一次都会忘记,因此打算在这里借着这一道模板题记录下自己对kmp算法的理解kmp算法的核心思想可以理解为:利用目标串自身的信息,来减少匹配次数提高效率next数组的引入next数组就是用来帮助利用目标串自身的信息的。我们这里定义next数组表示的是字符串的最长公共前后缀长度。那么对于字符串ABABABAC来说,求得其next数组就如下所示...原创 2020-03-28 23:36:49 · 359 阅读 · 0 评论