
算法
文章平均质量分 78
ylf13
这个作者很懒,什么都没留下…
展开
-
并查集算法
转自:http://blog.youkuaiyun.com/power721/article/details/4683604 如果:给出各个元素之间的联系,要求将这些元素分成几个集合,每个集合中的元素直接或间接有联系。在这类问题中主要涉及的是对集合的合并和查找,因此将这种集合称为并查集。 链表被普通用来计算并查集.表中的每个元素设两个指针:一个指向同一集合中的下一个元素;另一个指向表首元素。转载 2014-10-23 21:43:59 · 2032 阅读 · 0 评论 -
算法习题47:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
创新工场:求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}------------------------------------------------------http://blog.youkuaiyun.com/wumuzi520/article/details/7378306这题参见上面这篇博客的动态规划的方法,可以迅速解原创 2013-11-06 17:26:33 · 1801 阅读 · 0 评论 -
算法习题46:四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())
来自:http://bbs.youkuaiyun.com/topics/350118968搜狐:四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())---------------------------------------------这题直接用栈的思想就可以了,刚开始我还想直接用全排列的方法来解决,发现问题变得更加复杂了,因为重复问题不好解决,所以这里还是利用递原创 2013-11-06 13:23:16 · 4678 阅读 · 1 评论 -
算法习题45:对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一;;;一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值
.雅虎:1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到。2.一个整数数组,长度为n,将其分为m份,使各份的和相等,求m的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2,4}原创 2013-11-05 14:18:31 · 1850 阅读 · 0 评论 -
算法习题42:修改append函数,求链表并集
请修改append函数,利用这个函数实现:两个非降序链表的并集,1->2->3 和 2->3->5 并为 1->2->3->5另外只能输出结果,不能修改两个链表的数据。---------------------------------------------------------------首先需要找出两个集合相交的部分,并且头尾相交,可是这里是链表结构,我们无法从后面往前找,想原创 2013-11-04 12:49:08 · 992 阅读 · 0 评论 -
算法习题43:递归和非递归实现二叉树的前序遍历
.递归和非递归俩种方法实现二叉树的前序遍历。------------------------------------------------递归的替换我们很容易就想到,肯定是借助循环,可是我们这里递归二叉树的时候其实是借助编译器内部的栈来实现存储打印的,从而具有记忆功能,而现在如果只用循环,这种记忆功能将不存在,所以我们需要利用一个辅助队列来实现那么这个过程就简单多了,比如下面一棵原创 2013-11-04 13:49:13 · 882 阅读 · 0 评论 -
算法习题66:颠倒栈
颠倒栈。题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1 在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5 处在栈顶。---------------------------------需要两中递归,一个是把底部元素找到,返回,然后最后压入,这样我们另一个递归从上至下,即可完成注意要用引用,之前当成Java的写法,不用你引用,怎么改都不行,调试了才原创 2013-11-18 10:52:48 · 1040 阅读 · 0 评论 -
算法习题65:输出1到最大的N位数
.输出 1 到最大的 N 位数题目:输入数字 n,按顺序输出从 1 最大的 n 位 10 进制数。比如输入 3,则输出 1、2、3 一直到最大的 3 位数即 999。--------------------------------------------------(1)第一种:直接法这道题看起来还是比较简单的void CountNum(int N){ int max原创 2013-11-17 17:55:14 · 814 阅读 · 0 评论 -
算法习题40:设计最小栈,首尾相连珠子问题,系统设计问题
.百度研发笔试题引用自:zp1553348771)设计一个栈结构,满足一下条件:min,push,pop操作的时间复杂度为O(1)。2)一串首尾相连的珠子(m个),有N种颜色(N设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度。3)设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,则中国人民 人民中国都有效。原创 2013-11-01 15:43:28 · 1129 阅读 · 0 评论 -
算法习题39:二叉树节点距离
网易有道笔试:(1).求一个二叉树中任意两个节点间的最大距离,两个节点的距离的定义是 这两个节点间边的个数,比如某个孩子节点和父节点间的距离是1,和相邻兄弟节点间的距离是2,优化时间空间复杂度。(2).求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边,有向图不再连通,描述算法。----------------------------------原创 2013-11-01 14:56:43 · 834 阅读 · 0 评论 -
算法习题61:找出数组中两个只出现一次的数字:一个整型数组里除了两个数字之外,其他的数字都出现了两次
找出数组中两个只出现一次的数字题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是 O(n),空间复杂度是 O(1)。------------------------------------------------------------这题考查的是位的运算问题。如何区分数与数的不同呢?在位运算里不就是与 或 异原创 2013-11-14 11:33:43 · 2572 阅读 · 0 评论 -
算法习题64:寻找丑数2 3 5的倍数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。--------------------------------这题目其实类似之前一个统计某个数出现的1的个数,统计n以下所有数出现的1的次数。。这种题目如果用直接法一般能够迅速写出答案,原创 2013-11-15 11:42:53 · 1118 阅读 · 0 评论 -
算法习题38:百度面试题(天平,大量输入流,URL去重)
百度面试:1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用x次天平,最多可以从y个小球中找出较轻的那个,求y与x的关系式2.有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得m个记录3.大量的URL字符串,如何从中去除重复的,优化时间空间复杂度来自:http://bbs.youkuaiyun.com/topics/3501原创 2013-10-31 11:51:47 · 1963 阅读 · 0 评论 -
算法实战2:打印九九乘法表,要求只能用一个变量
来自:http://bbs.youkuaiyun.com/topics/390608383初看到这个的时候,让我想到http://blog.youkuaiyun.com/ylf13/article/details/12747119 这里的,不用关键字求和这种反常规的题目,总是让我念念不忘想用递归,可是发现,还没有递归可以实现的算法能用到这里,希望有人写出来的指点迷津下,在此谢过。、只准一个变量。。。原创 2013-10-31 18:59:41 · 1383 阅读 · 0 评论 -
算法习题37:有n个长为m+1的字符串, 如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接
有n个长为m+1的字符串,如果某个字符串的最后m个字符与某个字符串的前m个字符匹配,则两个字符串可以联接,问这n个字符串最多可以连成一个多长的字符串,如果出现循环,则返回错误。----------------------------------------------------------------------------------------------------------原创 2013-10-31 11:07:01 · 2164 阅读 · 0 评论 -
算法习题36:n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系
http://bbs.youkuaiyun.com/topics/350118968引用自网友:longzuo谷歌笔试:n支队伍比赛,分别编号为0,1,2。。。。n-1,已知它们之间的实力对比关系,存储在一个二维数组w[n][n]中,w[i][j] 的值代表编号为i,j的队伍中更强的一支。所以w[i][j]=i 或者j,现在给出它们的出场顺序,并存储在数组order[n]中,比原创 2013-10-30 14:32:20 · 3380 阅读 · 0 评论 -
算法习题49:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)------------------------------------------熟悉排序算法的人知道,目前比较好的排序算法就是快排堆排序归并等等,这些算法也只能让时间复杂度在O(NlogN)但是这道题却想让时间复杂度达到O(N)这个真心要想破我的头了。。刚开始思路是,可以不可以用哈希来排序,因为这个家伙太好用了,就原创 2013-11-07 13:07:51 · 6091 阅读 · 0 评论 -
算法习题48:一个数组是由一个递减数列左移若干位形成的,在这种数组中查找某一个数。
微软:一个数组是由一个递减数列左移若干位形成的,比如{4,3,2,1,6,5}是由{6,5,4,3,2,1}左移两位形成的,在这种数组中查找某一个数。 ----------------------------------------一般情况下,数组的查找都是建立在排序的基础上的,怎样的排序就决定来怎样的查找能够最快。例如二叉树查找,哈希查找等。这里的数组也是属于有序数组,所原创 2013-11-07 09:49:46 · 1553 阅读 · 0 评论 -
算法实战3:最长公共子序列
在很多实际应用中,经常需要比较两个序列的相似性,例如DNA,或者文档的查重,但是往往这些序列相同部分不一定是相连,中间可能存在一些干扰元素,这就需要找出这种最长的公共子序列。序列:X= Y=这两个序列最长的公共子序列(Longest Common Subsequence)是Z= Z=如何用程序找出来呢?-----------------这道题是一个很经典的动态规划的题目,所原创 2013-11-07 11:28:17 · 1264 阅读 · 2 评论 -
常用算法(2)
(1)选择第k个大的数该问题就是找出排序中排名第k的数,其实是一种原创 2014-08-07 19:53:19 · 611 阅读 · 0 评论 -
常用算法(1)
求公约数:了#include #include using namespace std;int main(int argc, char* argv[]){ int a = atoi(argv[1]); int b = atoi(argv[2]); while(a != b){ if(a>b) a -= b; else b -=原创 2014-07-28 20:58:03 · 796 阅读 · 0 评论 -
算法习题2:将二叉树转换成双向链表
继续上上篇博客,只写了一个二叉树常用方法,上篇中有些不足:1、添加新节点 那段代码可以独立出来,用递归方式写成void insertNode(BSTree* &p, int value){if(p == NULL){p = new BSTree();p->value = value;p->bsLeft = NULL;p->bsRight = NULL;ret原创 2013-10-10 12:47:16 · 765 阅读 · 0 评论 -
算法习题5:在二元树中找出和为某一值的所有路径
在二元树中找出和为某一值的所有路径输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如 输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构定义为:s原创 2013-10-11 12:44:57 · 1089 阅读 · 2 评论 -
算法实战6:倒水问题
题目详情有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。可以进行的操作是:把一个容器灌满;把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸);用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。 问是否能够通过有原创 2013-12-31 16:58:19 · 3056 阅读 · 0 评论 -
算法实战5:多种数据结构实现四则运算
其实问题还是挺多:(1)例如输入非运算符没有报错(2)对于“(2)”这种无法运算(3)暂时没有加入小数,基于整型运算-----------------------------------------------------------------其实每次看到栈的章节的时候都会拿四则运算做例子,这个确实是个很具体的例子,其实递归也是一种栈的实现,不过是编译器帮我们原创 2013-11-13 21:51:56 · 2212 阅读 · 0 评论 -
算法习题63:字符串删除特定字符
题目:字符串删除特定字符输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”Theyare students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。---------------------------------------------对于这中类型的题目,如果要一个个循环,那么O(m*n)。。可不可原创 2013-11-14 11:52:06 · 1142 阅读 · 0 评论 -
算法习题67(1):扑克牌顺子游戏
扑克牌的顺子从扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这 5 张牌是不是连续的。2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意数字。-----------------------------------炸一看,这题并不难,不过仔细想想,该如何表示这个结构呢?一开始,想尝试用链表,把牌数字按顺序排序好,如果是司令则记录司令原创 2013-11-25 12:46:14 · 1511 阅读 · 0 评论 -
算法习题59,60:不能被继承的类,O(1)时间复杂度删除链表节点
(1).不能被继承的类。题目:用 C++设计一个不能被继承的类。分析:这是 Adobe 公司 2007 年校园招聘的最新笔试题。这道题除了考察应聘者的 C++基本功底外,还能考察反应能力,是一道很好的题目。(2).在 O(1)时间内删除链表结点。题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点。链表结点的定义如下:struct ListNode{原创 2013-11-11 11:18:17 · 991 阅读 · 0 评论 -
算法习题57:用两个栈实现队列
用俩个栈实现队列。题目:某队列的声明如下:template class CQueue{17public:CQueue() {}~CQueue() {}void appendTail(const T& node);void deleteHead();// append a element to tail// remove a element from he原创 2013-11-10 11:09:36 · 719 阅读 · 0 评论 -
搜索引擎入门(二)
申明:我也是刚开始学习搜索引擎,如果有不妥指出望指出,此系列博文只是记录我学习的历程罢了,不喜勿喷。Author:元子*********************************************************************搜索引擎一般可以分为四个系统:(1)下载系统 就是我们平时所说的爬虫,Crawler. 在Windows下,原创 2013-11-09 17:09:36 · 846 阅读 · 0 评论 -
算法实战4:逃跑问题Escape
问题大致描述:有个小偷想要抢银行,可是他希望我们帮助他设计逃跑路线逃跑过程中有如下规则:(1)经过的路口不能再次走(2)每次路口只能选择直行或者右转问:有多少条路可以让小偷顺利回家假设地图如下,网格状假设小偷从(0,0)(左下角)开始逃跑,地图右上角(X,Y)是地图边界 ,(x,y)则是小偷的家输入:33 4 0 03 4 1 1 3 4 1原创 2013-11-09 15:13:31 · 2018 阅读 · 0 评论 -
算法习题51:输入一个正数n,输出所有和为n连续正数序列
和为n连续正数序列。题目:输入一个正数n,输出所有和为n连续正数序列。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6和7-8。分析:这是网易的一道面试题。--------------------------------------解法一:既然是连续的,我们当然可以借助两个游标,分别记住起始点和终止点,另一个变量记录和sum原创 2013-11-08 11:57:34 · 2442 阅读 · 3 评论 -
算法习题54:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分
调整数组顺序使奇数位于偶数前面。题目:输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。----------------------------------------------------------------这道题难度不是很大,同样利用两个指针分别从头尾开始遍历到中间相遇即可。其实这题就原创 2013-11-08 13:15:44 · 2229 阅读 · 0 评论 -
算法习题53:字符串全排列问题
来自:http://bbs.youkuaiyun.com/topics/350118968字符串的排列。题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出现在各大公司的面试、笔试题中。-------原创 2013-11-08 12:50:29 · 963 阅读 · 0 评论 -
算法习题35:求一个矩阵中最大的二维矩阵
求一个矩阵中最大的二维矩阵(元素和最大).如:1 2 0 3 42 3 4 5 11 1 5 3 0中最大的是:4 55 3要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码-----------------------------------------------------------------------这题目一看就让我想到图像处理,最原创 2013-10-30 13:34:19 · 1459 阅读 · 0 评论 -
算法习题34:生产者消费者队列(多线程编程)
实现一个队列。队列的应用场景为:一个生产者线程将int类型的数入列,一个消费者线程将int类型的数出列-------------------------------------------------这道题比较容易,就是一个队列的实现,这里我用面向对象的结构来写,一个Queue类有生产和消费的方法,里面内部结构是队列这里我用的是g++编译环境用的库是POSIX兼容的原创 2013-10-29 14:44:51 · 1401 阅读 · 0 评论 -
搜索图的最短路径之Dijk
理论部分我就用:http://blog.sina.com.cn/s/blog_4b9aefc20100zu8h.html希望到原文章看更详细的解释!1 最短路径算法在日常生活中,我们如果需要常常往返A地区和B地区之间,我们最希望知道的可能是从A地区到B地区间的众多路径中,那一条路径的路途最短。最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的原创 2013-10-28 16:08:45 · 2505 阅读 · 0 评论 -
算法实战1:爱消除(Elimination Game)
have you played the elimination game before? When you hit a rectangle, other rectangles which are adjacent and in same color will be cleared. We could use a n*m matrix to indicate the game board. Numb原创 2013-10-17 21:37:31 · 2131 阅读 · 0 评论 -
算法习题13:翻转链表
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode{ int m_nKey; ListNode* m_pNext;};上面这道题可以直接先遍历一遍整个链表,得到总个数n,然后n-k得到正的序号,或者先将链表翻转,然后找正的第k元素下面给出三种翻转链表的方法原创 2013-10-15 20:17:00 · 695 阅读 · 0 评论 -
算法习题9:判断整数序列是不是二元查找树的后序遍历结果
判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。原创 2013-10-14 11:43:55 · 571 阅读 · 0 评论