算法
soso密斯密斯
https://github.com/hughcoder
展开
-
Java ———KMP算法(字符串匹配)
问题:假设有这么一类问题:存在2个字符串,其中一个是另外一个的子串。 例如: 输入s1=abcd,s2=bc,输出:1。abcd从0开始算起。 解决一: 暴力遍历解决(遍历!!!) 思路:假设S=[a,b,c,d],p=[bc],找出P在S中的位置 1.判断s[0]==p[0],显然a!=b. 2.根据i=i-j+1,j=0; 判断s[0]==p[1],b==b成立 3.i++,原创 2017-09-26 09:50:30 · 998 阅读 · 0 评论 -
基本算法——归并排序
“归并”的含义是将两个或两个以上的有序表组合成一个新的有序表。利用归并的思想容易实现排序。假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列长度为1,然后两两归并,得到[n/2]个 长度为2或1的有序子序列;再两两归并,……,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。例图import java.util.Arrays;public class Me原创 2017-11-12 13:27:52 · 144 阅读 · 0 评论 -
基本算法——快速排序
冒泡排序:在排序过程中,关键字较小的记录好比水中气泡逐趟向上漂浮,而关键字较大的记录好比石块往下沉,每一趟有一块“最大”的石头沉到海底。快速排序(Quick sort)是对冒泡排序的一种改进。 它的基本思想是,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 假设待排序的序列为array{s,s+原创 2017-11-11 22:48:25 · 299 阅读 · 0 评论 -
关于最小的k个数有关partition问题详解
首先,解这类问题,我们首先要了解partion,简单来说,选一个基准数,将小于这个基准数的数放到这个基准数前面,大于这个基准数的放到这个基准数后面,原创 2018-03-09 10:53:52 · 874 阅读 · 0 评论 -
二叉树题目解析 ---java
将写过的积累积累,下面的题目都是剑指offer的,将思路讲出来才能真正理解进去T1输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。//前序遍历: 根左右 根节点肯定是前序遍历的第一个数//中...原创 2019-04-02 20:16:10 · 191 阅读 · 0 评论