算法
Aaron_Mars
这个作者很懒,什么都没留下…
展开
-
KMP算法快速理解
一、最长公共子缀公共子缀分为前缀和后缀前缀:总是包含第一个字符的子串(不包括父串本身)后缀:总是包含最后一个字符的子串(不包括父串本身)————————————————————————————举个例子:父串ABCDEAB前缀:A、AB、ABC、ABCD、ABCDE、ABCDEA后缀:B、AB、EAB、DEAB、CDEAB、BCDEAB最长公共子缀就是指完全相同的最长前缀和后缀在...原创 2020-03-16 15:51:23 · 457 阅读 · 0 评论 -
LeetCode4道搜索旋转数组题—33、81、153、154
LeetCode有4道搜索旋转数组的题目,这里一起说了。搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) ...原创 2020-03-09 16:28:55 · 307 阅读 · 0 评论 -
「辗转相除法」和「更相减损术」求最大公约数
一、辗转相除法举个例子,比如155和65155=652+2565=252+1525=151+1015=101+510=5*2+0一直除到余数为0为止,所以最大公约数是5public static int gcd1(int a, int b) { int l = Math.max(a, b); int s = Math.min(a, b); ...原创 2020-03-02 00:57:09 · 1679 阅读 · 0 评论 -
七大排序算法总结
以下所有动图均来源于一像素博客园以下代码均使用C++编写一、冒泡排序(Bubble Sort)1.原理:一共n个数,nums=[a1,a2,a3….an]。一共遍历n-1次。(1)第1次遍历:比较a1和a2,如果a1>a2,则交换两个数的位置,否则不变;再比较a2和a3,交换原理同上,一直比较到an-1和an。可以看到经原创 2018-09-25 17:26:44 · 3842 阅读 · 0 评论 -
编程之法1.1字符串的旋转
题目要求: 给定一个n位字符串,要求将字符串前面的m个字符移到字符串尾部。解法一:暴力移位法 也就是要移多少位就一位一位地移。 时间复杂度O(mn),空间复杂度O(1)。void ShiftOne(char *text,int n)//移动一个字符{ char t=text[0]; for(int i=1;i<n;i++) { tex...原创 2018-10-07 23:47:02 · 140 阅读 · 0 评论 -
编程之法1.2字符串的包含
题目要求: 给定一长字符串a和一短字符串b。请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中?请编写函数实现此功能。 为简单起见,假设输入的字符串只包含大写英文字母。下面举几个例子。 1.如果字符串a是"ABCD",字符串b是"BAD",答案是true,因为字符串b中的字母都在字符串a中,或者说b是a的真子集。 2.如果字符串a是&a原创 2018-10-08 13:46:25 · 252 阅读 · 0 评论 -
Manacher算法(求最长回文子串)
Manacher的主要用途是求一个字符串中包含的最长回文子串。一、前期处理 1.原始字符串长度有奇有偶,为了方便处理字符串,我们使用了一种统一的处理方法。在每个字符两边都插入一个特殊字符(注意这个字符一定是原始字符串不包含的,否则就会混了)。 比如原始字符串是"abcba",那增加特殊字符"#“之后就变成”#a#b#c#b#a#";原始字符串是"abba",增加特殊字符"原创 2018-10-21 20:43:13 · 469 阅读 · 0 评论