algorithm
pan__yy
Hello world
展开
-
【字符串系列】最长公共子序列(LCS)
LCS(longest common subsequent),暴力求解的复杂度为O(2^m*2^n),用dp求解的时间复杂度为O(m+n),本博文主要介绍LCS的dp求法,并且给出一点对应的模板题。LCS的思想很简单,声明一个dp数组,用dp[i][j]表示一个长度为i的字符串和一个长度为j的字符串的LCS,很容易得到转移方程:dp[i,j]=⎧⎩⎨⎪⎪0dp[i−原创 2016-09-22 23:43:39 · 536 阅读 · 0 评论 -
C语言求最小公倍数
首先,需要知道一个公式,最小公倍数=两整数的乘积/最大公约数。 最大公约数通过辗转相除求得,具体求法可以看我的博客,利用位操作,实际上一行代码即可求出最大公约数。 http://blog.csdn.net/qq_22497299/article/details/51922527 知道如何求最大公约数之后,只要知道公式,求最小公倍数就不在话下了。int lcm(int a, int b){原创 2016-10-08 19:14:59 · 791 阅读 · 0 评论 -
四行代码求最大公约数(欧几里得算法)
本文要介绍的不是普通的欧几里得算法(辗转相除法),而是利用位操作实现的欧几里得算法,利用位操作实现欧几里得算法主要有以下两个优点:1.代码量少 2.效率高。int gcd(int a, int b){ while(b^=a^=b^=a%=b); return a;}/*b^=a^=b^=a%=b可以分解成以下四句a=a%b;b=b^a;a=a^b;b=b^a;第一句用原创 2016-07-16 08:30:37 · 647 阅读 · 0 评论 -
【字符串系列】最长上升子序列(LIS)
LIS(Longest increasing subsequence) 主要有O(nlogn)和O(n^2)两种解法,本博文主要介绍O(nlogn)解法,顺便提一下O(n^2)。首先说一下O(n^2)解法的思路,假设一个数组a[n],定义dp[i]为以a[i]结尾的LIS的值,那么对于a[i],有dp[i]=max{dp[k],k∈[1,i-1]且a[k]}+1,迭代求解,dp[n]就原创 2016-09-23 15:35:32 · 495 阅读 · 0 评论 -
二分查找实用模板
二分查找,又叫折半查找。网上有很多写法,但是经过总结之后发现这个模板是最管用的。说一下这个二分模板的作用:找到的话且这个数唯一则返回下标位置,如果不唯一则返回最右边的下标;找不到的话返回比它大的第一个数(即右边的数)的下标。注意代码,经过细微的修改可以达到不同的效果int bSearch(int begin, int end, int e) { int mi原创 2016-09-20 12:52:53 · 4526 阅读 · 2 评论