算法
文章平均质量分 59
guangwen_lv
这个作者很懒,什么都没留下…
展开
-
最长公共子串问题
动态规划有一个经典问题是最长公共子序列,但是这里的子序列不要求连续,如果要求序列是连续的,我们叫公共子串,那应该如何得到这个串呢?最简单的方法就是依次比较,以某个串为母串,然后生成另一个串的所有长度的子串,依次去母串中比较查找,这里可以采用先从最长的子串开始,减少比较次数,但是复杂度依然很高!然后重新看一下这个问题,我们建立一个比较矩阵来比较两个字符串str转载 2014-09-12 23:01:41 · 387 阅读 · 0 评论 -
输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.
实际上就是一个背包问题。求解思路:1.首先判断,如果n>m,则n中大于m的数不可能参与组合,此时置n = m;2.如果n == m满足条件则将最大数n加入,输出一种组合;3.将n分两种情况求解,(1)n加入,取n = n - 1, m = m - n,递归下去;(2)n没有加入,取n = n - 1; m = m;递归下去#include"stdaf转载 2014-10-04 19:25:16 · 661 阅读 · 0 评论 -
用快速排序的思想求第K大的数或最大的k个数
#include using namespace std; template class T> int quick2_sort(T a[],int low,int high) { T temp=a[low]; int pos=low; int i=low,j=high; while(i {转载 2014-09-29 19:26:03 · 3701 阅读 · 0 评论 -
编程之美: 求二叉树中节点的最大距离
问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。书上的解法书中对这个问题的分析是很清楚的,我尝试用自己的方式简短覆述。计算一个二叉树的最大距离有两个情况:情况A: 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点。情况B: 路转载 2014-10-04 13:47:07 · 543 阅读 · 0 评论 -
Dijkstra算法(单源最短路径)
单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。 假转载 2014-10-01 20:04:30 · 476 阅读 · 0 评论 -
二分查找杨氏矩阵
杨氏矩阵中,每行元素是递增的,每列元素也是递增的。采用二分查找法,时间复杂度为O(max(m,n))。先将给定的值key与二维数组右上角的元素比较,若相等,则返回true,若key小于它,则最后一列的元素肯定都大于key,此时可以删除掉最后一列,而若key大于它,则第一行的元素肯定都小于key,此时可以删除掉第一行,依次向下比较,如果比较到了左下角的元素,还没有发现等于key的,则返回fasl转载 2014-10-01 11:28:43 · 565 阅读 · 0 评论 -
用辗转相除法求最小公倍数
因为一个数=它的最大公约数原创 2014-09-30 22:19:43 · 1483 阅读 · 0 评论 -
数对之差的最大值
题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果。分析:看到这个题目,很多人的第一反应是找到这个数组的最大值和最小值,然后觉得最大值减去最小值就是最终的结果。这种思路忽略了题目中很重要的一点:数对之差是一个数字减去它右边的数字。由于我们无法保证最大值一定位于转载 2014-10-07 16:57:50 · 483 阅读 · 0 评论 -
数组中三个只出现一次的数字
题目:一个数组中有三个数字a、b、c只出现一次,其他数字都出现了两次。请找出三个只出现一次的数字。分析:在博客http://zhedahht.blog.163.com/blog/static/2541117420071128950682/中我们讨论了如何在一个数组中找出两个只出现一次的数字。在这道题中,如果我们能够找出一个只出现一次的数字,剩下两个只出现一次的数字就很容易找出来了。如果我们转载 2014-10-07 20:18:00 · 465 阅读 · 0 评论 -
海量数据处理面试题
何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化转载 2014-10-07 15:29:55 · 392 阅读 · 0 评论 -
八皇后问题(用排列来做)
题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即任意两个皇后不得处在同一行、同一列或者同一对角斜线上。下图中的每个黑色格子表示一个皇后,这就是一种符合条件的摆放方法。请求出总共有多少种摆法。转载 2014-10-07 14:37:13 · 423 阅读 · 0 评论 -
输出1到最大的N位数
题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。分析:这是一道很有意思的题目。看起来很简单,其实里面却有不少的玄机。应聘者在解决这个问题的时候,最容易想到的方法是先求出最大的n位数是什么,然后用一个循环从1开始逐个输出。很快,我们就能写出如下代码:// Print numbers from 1 to the ma转载 2014-10-06 11:18:44 · 456 阅读 · 0 评论 -
求对称子字符串的最大长度
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。分析:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。引子:判断字符串是否对称要判断一个字符串是不是对称的,不是一件很难的事情。我们可以先得到字符串首尾两个字符,判断是不是相等。如果不相等,那转载 2014-10-06 20:22:33 · 485 阅读 · 0 评论 -
程序员面试题精选100题(完整版)博客地址
点击打开链接转载 2014-10-06 09:34:12 · 532 阅读 · 0 评论 -
字符串的组合
题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。用递归的思路来求字符串的组合:假设我们想在长度为n的字符串中求m个字符的组合。我们先从头扫描字符串的第一个字符。针对第一个字符,我们有两种选择:一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符;而是不把这个字符放到组合中去,接转载 2014-10-05 19:00:34 · 426 阅读 · 0 评论 -
一串首尾相连的珠子(m 个),有N 种颜色(N<=10),设计一个算法,取出其中一段,要求包含所有N 中颜色,并使长度最短。并分析时间复杂度与空间复杂度。
思路:先从index=0处搜索,每检查一颗珠子,响应的颜色数量+1,如果是新的颜色则总颜色数+1. 当颜色总数为n时,找到第一个满足条件的连续序列。 1>从该序列起始处搜索,若搜索处的颜色数量不为1,则表明该串还有别的珠子有该颜色,继续往前搜索并更新该序列,起始索引位置+1.转载 2014-10-05 14:58:40 · 931 阅读 · 1 评论 -
最长字符串链接
有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。 思路 :分析一下,将各个字符串作为一个节点,首尾链接就好比是一条边,将两个节点连接起来,于是问题就变成一个有关图的路径长度的问题。链接所得的字符串最长长度即为从图的某个节点出发所能得到的最长转载 2014-10-05 14:17:23 · 720 阅读 · 0 评论 -
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
观察规律:从个位到最高位,我们判断每一位1出现的次数。比如对于数23 1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 20 2 1 22 23个位为1的数为01,11,21。次数为3十位为1的次数,10,11,12.13 14 15 16 17 18 19 次数为10次总结规律得到:转载 2014-10-05 10:21:36 · 1016 阅读 · 0 评论