ALG
bobkentblog
我是一geek
展开
-
数据结构和算法经典100题-第29题
二叉树节点间的最大距离问题题目要求:二叉树节点间的最大距离问题从二叉树的节点A出发,可以向上走或者向下走,但沿途的节点只能经过一次,当达到节点B时,路径上的节点数叫作A到B的距离。原创 2015-12-30 13:11:04 · 667 阅读 · 1 评论 -
数据结构和算法经典100题-第28题
题目要求:{1,2,3…N}表示一棵二叉树中序遍历结果, 1.求有多少种可能的二叉树结构? 2.返回所有可能的二叉树结构的头结点?题目解析: 题目解析:原创 2015-12-30 10:48:09 · 485 阅读 · 0 评论 -
数据结构和算法经典100题-第27题
已知一棵二叉树的每个节点的值都不同,给定这个二叉树的先序和中序遍历数组,不要重建整棵二叉树,而知通过给定的数组直接生成正确的后序数组。原创 2015-12-29 23:07:54 · 406 阅读 · 0 评论 -
数据结构和算法经典100题-第26题
题目: 要求实现一个队列类,队列底层由两个栈实现。题目解析:原创 2015-12-28 10:04:29 · 593 阅读 · 0 评论 -
网上看到的一道腾讯面试题
题目大意是这样的: 已知一个数组,其中某一个数出现的频率超过整个数组大小的一半,求出这个数(要求时间O(n) )主要思路: 一般的思路是先排个序,然后统计出各个数出现的频率。排序的时间复杂度是O(n*lgn),统计的时间复杂度是O(n)。总时间复杂度是O(n * lgn + n)(如果利用定理排好序的数组的中间那个一定是这个数,则总时间复杂度是O(n * lgn))。不满足题目要求。其实解决此原创 2015-09-20 19:57:01 · 517 阅读 · 0 评论 -
最小生成树总结(prim、并查集和kruskal) C++实现
摘要:本文按照如下顺序进行:1.介绍最小生成树的概念;2.介绍prim算法的思想,以及C++实现;3.介绍并查集概念,给出C++并查集的代码实现(因为kruskal算法必须用到并查集,所以在这里讨论一下);4.介绍kruskal算法思想,以及C++实现5.附录给出prim算法、并查集和kruskal算法实现完整代码和测试程序。原创 2015-09-27 03:44:04 · 4291 阅读 · 0 评论 -
Dijkstra算法研究(深度解析/C++实现)
本文首先介绍Dijkstra的原理,然后一步步用C++实现,最后给出完整源码和测试用例原创 2015-09-02 23:16:53 · 3383 阅读 · 0 评论 -
图论-BFS解无权有向图最短路径距离
概述本篇博客主要内容:对广度优先搜索算法(Breadth-First-Search)进行介绍;介绍用邻接表的存储结构实现一个图(附C++实现源码);介绍用BFS算法求解无权有向图(附C++实现源码)。最后给出完整的代码和朋友们一起讨论进步。原创 2015-08-13 00:28:16 · 5837 阅读 · 0 评论 -
数据结构和算法经典100题-第21题
题目要求: 给定数组arr,arr[i] == k代表可以从位置i向右跳1~k个距离,比如,arr[2] == 3,代表从位置2可以跳到位置3、位置4或位置5,如果从位置0出发,返回最少跳几次能跳到arr最后的位置上?解析: 思路:可以考虑从两个角度解决这个问题,关键在于选择参考标准,第一种可以把这个问题归结为到达每个固定坐标至少需要多少步。显然不符合贪心条件,想到用动态规划打表解决。OK这是一原创 2015-12-16 10:56:46 · 847 阅读 · 0 评论 -
数据结构和算法经典100题-第30题
摘要:先序、中序和后序数组两两结合重构二叉树题目要求:已知一棵二叉树的所有节点都不同,给定二叉树的先序、中序和后序数组,请分别用三个函数实现任意两种组合重构原来的二叉树,并返回重构二叉树的头节点。原创 2015-12-30 22:11:21 · 501 阅读 · 0 评论 -
二叉树的先序、中序和后序遍历(总结)
对二叉树的先序、中序和后序遍历方法进行总结,分别给出递归和非递归的方法。原创 2015-12-23 22:31:12 · 1109 阅读 · 0 评论 -
数据结构和算法经典100题-第33题
题目要求:二叉树的序列化和反序列化。二叉树被记录成文件的过程叫做二叉树的序列化,通过文件内容重建原理二叉树的过程叫做二叉树的反序列化。 请设计一种方案实现二叉树的序列化和反序列化。题目解析:原创 2016-01-03 18:13:10 · 443 阅读 · 0 评论 -
数据结构和算法经典100题-第33题
最大值减去最小值小于或等于num的子数组的数量 题目要求: 给定数组srr和整数num,返回共有多少满足如下条件的子数组? max{arr[i…j]} - min{arr[i…j]} <= num max{arr[i…j]}表示数组arr[i…j]中最大的值 min{arr[i…j]}表示数组arr[i…j]中最大的值说明: 请实现时间复杂度为O(N)的算法原创 2016-01-03 15:28:24 · 428 阅读 · 0 评论 -
数据结构和算法经典100题-第32题
生成窗口最大数组,题目要求: 一个整形数组arr和一个大小为w的串口从数组的最左边滑到最右边,窗口每次向右边滑一个位置。 要求实现一个函数: 输入:整形数组attr,窗口大小为w 输出:一个长度为n-w+1的数组res,res[i]表示每个窗口的最大值。原创 2016-01-03 13:48:26 · 398 阅读 · 0 评论 -
数据结构和算法经典100题-第24题
在二叉搜索树中寻找一个节点的后继节点 题目要求 假设有二叉树节点:class Node {public: Node *parrent; Node *left; Node *right; int value; Node(int value) { this->value = value; } ~Node() {};};要求寻原创 2015-12-16 23:44:02 · 463 阅读 · 0 评论 -
数据结构和算法经典100题-第22题
题目要求: 排成一条线的纸牌博弈问题 给定一个整形数组arr,代表数值不同的纸牌排成一条线。玩家A和玩家B依次拿走每张纸牌,规定玩家A先拿,玩家B后拿,但每个玩家每次只能拿走最左或最右的纸牌,玩家A和玩家B都绝顶聪明,请返回最后获胜者的分数。解题分析:原创 2015-12-16 22:17:16 · 358 阅读 · 0 评论 -
数据结构和算法经典100题-第23题
题目: 给定一个有序数组int array[n],已知其中没有重复值,用这个有序数组生成一棵平衡二叉树,要求中序遍历结果与数组一致。题目解析:。。。。。。。。。。原创 2015-12-16 22:56:50 · 524 阅读 · 0 评论 -
数据结构和算法经典100题-第31题
题目要求: 字符串中的数字子串求和 要求忽略小数点,负负得正例如:ABC1def-2cddg–3op,则解析为(1) + (-2) + (–3) = 1 - 2 + 3 = 2原创 2015-12-31 13:49:56 · 481 阅读 · 0 评论 -
分享一个linux有趣的功能
分享linux一个有趣的功能,快去整蛊你的同事吧原创 2015-06-30 13:49:54 · 601 阅读 · 0 评论 -
数据结构和算法经典文章汇总
数据结构和算法经典好文章汇总:转载 2015-06-29 14:50:37 · 986 阅读 · 0 评论 -
数据结构和算法经典100题-第7题
题目要求微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。 为了简化问题,我们假设俩个链表均不带环。问题扩展: 1.如果链表可能有环列? 2.如果需要求出俩个链表相交的第一个节点列?问题分析: 其实本题目是考察链表的相交和环的问题。 一个链表的相交判断中,带环和不带环的判断方法是不一样的。稍后介绍两个都带环链表和都不带环链表的相交的判断原创 2015-04-21 01:36:42 · 592 阅读 · 0 评论 -
数据结构和算法经典100题-第5题
题目要求:5.查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。题目分析:粗看此题想到此题是考察排序算法,但是观察一下就会发现。由于题目中只是要求输出最小的k个数,并没有求出所有元素的顺序。由于考虑时间复杂度和空间复杂度尽可能的小。那么想想看看有没有线性的算法解决这个问题。首先想到的是取任意原创 2015-04-11 17:13:41 · 703 阅读 · 0 评论 -
数据结构和算法经典100题-第9题
在这里说明一下第6题和第8题是智力题,考察数据结构和算法的知识不多。这里就不给出题目和解题思路了。第9题 题目判断整数序列是不是二元查找树的后序遍历结果 题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。 如果是返回true,否则返回false。 例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \原创 2015-04-23 00:38:22 · 609 阅读 · 0 评论 -
堆排序
堆排序 堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。1.堆 堆实际上是一棵完全二叉树,其任何一非叶节点满足性质: Key[i]=Key[2i+1]&&key>=key[2i+2] 即任何一非叶节点的关键字不大于或者不小于其左右孩子节点的关键字。 堆分为大顶堆和小顶堆,满足Key[i]>=Key[2i+1]&&key>转载 2015-04-11 14:07:56 · 373 阅读 · 0 评论 -
数据结构和算法经典100题-第4题
题目 4.在二元树中找出和为某一值的所有路径 题目:输入一个整数和一棵二元树。 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。 打印出和与输入整数相等的所有路径。 例如输入整数22 和如下二元树 10 / \ 5 12 / \ 4 7 则打印出两条路径:10, 12 和10, 5, 7。题目分析可以看到在一棵二元树的各个路径上遍历。由于都是先访问各子树的根原创 2015-03-29 03:18:40 · 607 阅读 · 1 评论 -
数据结构和算法经典100题-第3题
题目3 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。要求时间复杂度为O(n)。题目分析 从题目中略微一看,会发现这是一个经典算法,考察的是子序列求和问题。 而要求时间复杂度是O(n)。那么很快就可以写出如下代码#include <stdio.h>#include <vector>#include原创 2015-03-29 03:06:12 · 706 阅读 · 1 评论 -
数据结构和算法经典100题-第2题
题目2 设计包含min 函数的栈。 定义栈的数据结构,要求添加一个min 函数,能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。题目分析 这是一个传统的经典题目,设计一个栈结构,提供时间复杂度是O(1)的三个方法:min、push、pop。 push和pop两个方法时间复杂度是O(1)很容易实现。而min方法的时间复杂度是O(1),则要求我们在获取最原创 2015-03-29 02:33:53 · 570 阅读 · 0 评论 -
数据结构和算法经典100题-第1题
说在开头的话:如果拿金庸武侠做个比喻,数据结构和算法的学习就好比是程序员内功。内功的修炼往往不能一蹴而就,需要水滴石川。在博客中的这个分类中,专门记录我在数据结构和算法中的修炼。希望数据结构和算法的武林高手们多多指导,希望一起有志于提高内功的朋友们和我一起切磋进步。 从网络上看了很多关于数据结构和算法的学习方法。我采取的学习路线也并不是最好的,总结下来是:观看麻省理工大学的公开课《算法导论》视频原创 2015-03-26 17:48:21 · 5465 阅读 · 0 评论 -
数据结构和算法经典100题-第13题
题目: 输入一个单向链表,输出该链表中倒数第k个结点, 链表的倒数第1个结点为链表的尾指针。题目分析: 题目分析:此题目不难,只需要定义两个链表的结点指针,分别指向头结点。 然后其中一个向前移动k-1步,然后这两个结点分别向后移动。一直到 前面的的指针移动到链表的尾指针位置。我们看一下代码,头文件://// 13th.h// 100-alg-tests//// Crea原创 2015-05-10 01:38:37 · 389 阅读 · 0 评论 -
数据结构和算法经典100题-第20题
题目20是:字符串转换成整数输出的问题原创 2015-06-27 20:52:57 · 535 阅读 · 0 评论 -
数据结构和算法经典100题-第18题
这是一个约瑟夫环问题。Okay看题目吧。 第18题 题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始, 每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。 当一个数字删除后,从被删除数字的下一个继续删除第m个数字。 求出在这个圆圈中剩下的最后一个数字。题目分析:第一时间想到的方法是创建一个循环链表或者是一个带有循环数组这样一个循环数据结构来原创 2015-06-25 01:22:43 · 540 阅读 · 0 评论 -
数据结构和算法经典100题-第16题
第16题 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / / 6 10 // // 5 7 9 11 输出8 6 10 5 7 9 11。题目分析: 从题目中可以看出,要求的遍历顺序不是前序、中序或后序遍历树。树是通过递归定义的,正常递归方法不能实现原创 2015-05-19 17:16:36 · 410 阅读 · 0 评论 -
数据结构和算法经典100题-第19题
最近在忙着学习redis的源代码,总算把《redis设计和实现》看完了,下面该详细写redis的代码分析了。好久木有更新算法题了,现在继续更新算法题,看一下题目: 第19题题目:定义Fibonacci数列如下: / 0 n=0 f(n)= 1 n=1 \ f(n-原创 2015-06-23 23:17:33 · 437 阅读 · 0 评论 -
数据结构和算法经典100题-第15题
题目: 输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入: 8 / / 6 10 / / / / 5 7 9 11输出: 8 / / 10 6 / / / / 11 9 7 5题目分析:题目分析:因为树的本质就是用递归实现的,所以用递归解决此问原创 2015-05-17 23:38:28 · 453 阅读 · 0 评论 -
数据结构和算法经典100题-17题
题目: 题目:在一个字符串中找到第一个只出现一次的字符。 如输入abaccdeff,则输出b。 这道题是2006年google的一道笔试题。题目分析: 题目分析: 由题目可知,此问题考察字符出现的次序问题。解此问题至少需要扫描一遍字符流,得不到log(n)的时间复杂度的方法解决。那么最好的办法是需要至少扫描一遍字符流,因为是字符串,降低了很大的难度。因为字符char的长度是8,,所以我们可原创 2015-05-20 22:49:46 · 885 阅读 · 0 评论 -
数据结构和算法经典100题-第10题
第10 题题目如下翻转句子中单词的顺序。 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。 句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a am I”。题目分析:这是一个字符串处理问题,由于是单词和句子的反转,可以考虑从输入流末尾遍历一直遍历输入流开头,在遍历到空格之后,将单词反转原创 2015-05-04 19:26:07 · 467 阅读 · 0 评论 -
数据结构和算法经典100题-第14题
题目14: 题目:输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。 如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。题目分析:数组已经是按升序排好队,难度着实降低了不少。不难想到有两种方法可以解决此问题: 第一种方法是用两原创 2015-05-10 17:26:09 · 516 阅读 · 0 评论 -
数据结构和算法经典100题-第25题
判断两个字符串是否互为变形词题目要求: 给定两个字符串str1和str2,若str1和str2中的字符种类一样,每个字符出现的频率一样,那么str1和str2就互为变形词。题目分析: 题目解析:原创 2015-12-24 09:18:17 · 1636 阅读 · 0 评论