
算法学习
时间慢慢
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
牛客网算法课系列(一):字符串和二叉树打印问题
二叉树打印按照层遍历(相当于图的宽度优先) 队列即可实现: 关键在记录当前层数,用一个标记theList标记当前层;用nextList一直标记最后一个进入队列的(在打印完当前层时,nextList指向的一定是下一层的最后一个);当打印的当前节点为theList,则说明当前层打印完毕,进入下一层的打印,此时theList=nextList,使得theList更新为下一层的终点;nextList跟随原创 2017-08-17 20:26:34 · 696 阅读 · 0 评论 -
牛客网算法课系列(三):字符串
字符串广泛性 字符串可以看做字符类型的数组,与数组的排序、查找、调整有关 字符串类型转换 Java中string不可更改,可使用StringBuffer和StringBuilder类和toCharArray(); 概念: 回文、子串(连续)、子序列(不连续)、前缀树、后缀树和后缀数组、匹配、字典序; 操作 与数组有关的操作:增删改查 字符替换 字符串旋转旋转词问题; 逆序调整问题原创 2017-08-21 09:55:57 · 1266 阅读 · 0 评论 -
KMP算法(浅显易懂)
KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。讲道理 大串A(长度n) 小串B(长度m) 一般匹配字符串,一个一个比,当前字符对了则比对下一个,不对了再从B的头开始比,移动一个位置;这样的时间复杂度是O(n*m) KMP可以实现复杂度为O(m+n) 改进的点就在于通过当发生不匹配时,之前匹配完成的部分的信息的利用原创 2017-08-21 17:08:36 · 785 阅读 · 0 评论 -
输出一个字符串的全排列
输入一个字符串,打印这个字符串中字符的全排列。 eg: 输入:abc 输出:abc acb bac bca cab cba 思路:将求字符串的全排列分解为两步: 第一步是确定第一个位置的字符,就是第一个位置与后边的所有字符进行交换。 第二步,就是对除了第一个位置的后边所有位置的字符进行相同处理;直至剩下一个字符,打印;看成两部分: 交换后只关注后边的; 实现代码:import j原创 2017-09-16 11:16:55 · 13529 阅读 · 6 评论 -
排序算法的Java实现+思路(一):冒泡、快排
冒泡排序:/** * 冒泡排序 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 */public static void bubbleSort(int[] numbers){ int length = numbers.length; int exchange = 0; for (int i = 0;i< length;i++){ for (原创 2017-09-18 10:33:57 · 506 阅读 · 0 评论 -
动态规划:最大连续子序列和
问题:给定一个数字序列:A1、A2、A3。。。AN 求i和j,使得Ai加到Aj的和最大,输出和;思路: 设置一个数组endMax【N】,下标为i,含义为以第i个值为结尾的连续子序列的最大值: 两种情况: 1>从前边某位置开始的最大连续子序列开始到i位置:endMax【i-1】+Ai 2>这个最大和连续子序列为长度一:Ai开始Ai结束因此得到状态转移方程:endMax【i】 = max原创 2017-09-10 12:03:45 · 1099 阅读 · 0 评论