
算法
文章平均质量分 70
jbm3072
这个作者很懒,什么都没留下…
展开
-
[输入一个字符串,输出该字符串中对称的子字符串的最大长度][解题方法]
题目 输入一个字符串,输出该字符串中对称的子字符串的最大长度。 比如输入字符串"google",由于该字符串里最长的对称子字符串是"goog",因此输出4。 思想 首先想到的是采用穷举的方法来分析该问题. 即从最大的对称串开始判断,如果不是,减小一,再找存在不存在对应长度的字符串,依次直到找到对称串长度,返回。 上述方法...2011-06-08 16:28:49 · 838 阅读 · 0 评论 -
[字符串原地压缩][代码实现]
题目字符串原地压缩。题目描述:“eeeeeaaaff"压缩为 "e5a3f2",请编程实现。 思想 首先想到最简单的方法是创建一个数组,一次遍历就可以将原字符串压缩。时间复杂度O(N),空间复杂度O(N)。但这种方法不符合题意,题目要求原地压缩。那么空间复杂度应该是O(1)。 如果使用原地压缩,最麻烦的就是移动数据。如果不用移动数据,就能达到时间复杂度O(N)...2011-06-08 17:18:21 · 457 阅读 · 0 评论 -
Java Arrays和Collections类的排序算法
在Java的Arrays和Collections类里,分别提供了对数组和List的排序算法。不过今天在看Arrays排序算法时,发现对float/long/int/char等进行排序时,使用的算法是快速排序;而对于Object数组排序则是使用的是合并排序(改进后的)。想了一下,原因很容易理解。快速排序是不稳定的算法,这意味着对于相同的元素经过排序后会出现位置调换的情况。而对于基本类型的数组,这...2011-09-16 11:27:32 · 263 阅读 · 0 评论 -
Java Arrays 快速排序算法的实现
我们知道Java在排序上分别使用了快速排序和合并排序。下面我们就研究一下这两种排序。本节先分析快速排序,我们以Int数组的排序为例。 Java的排序算法是这样子的:方法声明如下:sort1(int x[], int off, int len) 对于数组个数小于7的情况下,使用插入排序:if(len < 7) { for (int i=off; ...2011-09-16 12:48:01 · 185 阅读 · 0 评论 -
Java Arrays合并排序算法的实现
下面再来看看Arrays里面的合并排序算法实现。先把完整的源代码贴过来看看 public static void sort(Object[] a, int fromIndex, int toIndex) { rangeCheck(a.length, fromIndex, toIndex); Object[] aux = copyOfRange(a, fromIn...2011-09-16 13:28:54 · 182 阅读 · 0 评论 -
Java hashMap的 Hash函数
在教科书提到的Hash函数就是求模了。Java的hash函数是怎样的呢?先看代码: /** * Applies a supplemental hash function to a given hashCode, which * defends against poor quality hash functions. This is critical ...2011-09-16 14:35:51 · 225 阅读 · 0 评论 -
[求最长公共子串(Longest Common Subsequence, LCS)][解题方法]
问题如果字符串一的所有字符按其在字符串中的顺序出现在另外一个字符串二中,则字符串一称之为字符串二的子串。 注意,并不要求子串(字符串一)的字符必须连续出现在字符串二中。 请编写一个函数,输入两个字符串,求它们的最长公共子串,并打印出最长公共子串。 例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子...2011-06-09 16:37:37 · 317 阅读 · 0 评论 -
打印一个数的加法组合
下面的代码用于打印加法的组合。在打印时使用递归。思路来自于打印一个集合的所有子集;不过对于集合的所有子集,没有重复的情况。在打印加法组合的时候,因为有重复的情况的。这里处理重复是通过判断是否递减序列来实现的。即只保留有序序列即可实现。 递归结束后需要恢复现场 /** * 打印加法组合 * 例如5可以输出: * 5 4 1 3 2 3 1 1 ...原创 2011-10-19 16:12:08 · 666 阅读 · 0 评论