数据结构与算法
文章平均质量分 65
Jaryn1024
这个作者很懒,什么都没留下…
展开
-
分治算法
分治算法:归并、快速1、分治的思想就是将一个复杂的问题分成若干个小问题,然后求解小问题,最后再合并求出原问题的解。该类思想的代表算法有归并排序和快速排序。2、归并排序 过程:以整型数组为例,归并算法先把原数组平分成两个数组,然后再把子数组再平分成两个数组,直到最后子数组只有一个元素时开始合并成一个数组,一直合并为原来数组的大小,由于合并的时候每个数组都是有序的,所有合原创 2014-09-04 22:27:03 · 599 阅读 · 0 评论 -
求树中节点的最大距离
求树中节点的最大距离。 如上图所示,我们要求的距离是3/7到20之间的距离,为5。我们需要从叶子节点开始计算,对于每一个父节点都要计算通过此节点的两个子节点的最大距离。我们用上溯的方法。3、7:depth(深度)为0,maxDis(最大距离)为05:depth(深度)为1,maxDis(最大距离)为212:depth(深度)为0,ma原创 2014-09-09 22:18:34 · 762 阅读 · 0 评论 -
查找二叉树某两个节点最近的共同祖先及改进方法
这个题目偶尔看到网上有个jie原创 2014-09-09 23:12:16 · 2603 阅读 · 0 评论 -
求整型二叉树节点差值的最大绝对值
遍历树,求出最大值和最小值。上程序:struct Tree{ int data; Tree * lChild; Tree * rChild;};template typename T1,typename T2> T1 getMaxfabs(T2 T){ T1 min = T->data; T1 ma原创 2014-09-10 13:39:50 · 633 阅读 · 0 评论 -
求整型数的二进制表示中1的个数。简单题目中蕴藏着人生真谛啊
//1、9;2、0x8000 0000 0000 0000int getCount(int n){ int num=0; int flag = 1; while (flag) { if (n & flag) { ++num; } flag原创 2014-09-10 14:52:47 · 566 阅读 · 0 评论 -
图的几种常见的算法
1、拓扑排序找到图中没有输入只有输出的点,原创 2014-09-10 16:16:35 · 2191 阅读 · 0 评论 -
组合数
写组合数:从{1,2,3,4,5}中选3个数,输出所有组合。然后扩展到从n个数中选m个数。1、动态规划——递归2、非递归3、wei原创 2014-09-10 12:00:41 · 424 阅读 · 0 评论 -
求字符串可匹配的最大长度
如:text=“abcdlijkfgd”,query=“abcdefg”,最大匹配为“abcd”原创 2014-09-10 14:04:05 · 4189 阅读 · 0 评论 -
不用辅助变量交换两个整数的值。真的很简单吗?
比如给你两个数,a和b,让你交换他们两个数的值原创 2014-09-10 15:25:29 · 681 阅读 · 0 评论 -
八皇后
八皇后的问题众所皆知,任两个huang原创 2014-09-10 23:13:34 · 717 阅读 · 0 评论 -
红黑树原理详解
前言: 之所以要写这篇文章,第一个目的是为了各位朋友在查看我写的源代码之前有一个可以理解理论的文章因为红黑树还是有点难的,如果不想搞懂理论,而直接看代码,那绝对是云里雾里,不知所云。第二个目的是我觉得网上虽然后不少我文章也在讲,但是我就是理解不上有点困难,在我参考了很多文章之后,认真阅读才慢慢摸透了其中的原理,所以我想用自己的方式来表达,希望有助于各位的朋友转载 2014-09-12 00:34:16 · 569 阅读 · 0 评论 -
图(Graph)——最小生成树、最短路径、Kruskal、Dijkstra、Floyd
4. 最小生成树4.1 生成树(1)定义:所有顶点均由边连接在一起,但不存在回路的图叫该图的生成树(2)深度优先生成树与广度优先生成树(3) 一个图可以有许多棵不同的生成树 所有生成树具有以下共同特点: 生成树的顶点个数与图的顶点个数相同 生成树是图的极小连通子图4.2 最小生成树转载 2014-09-23 08:58:08 · 2020 阅读 · 0 评论 -
图(Graph)——基本概念、存储、遍历
. 图的基本概念图(Graph):G = ( V,E )V(G):顶点E(G):边(1)边:(2)权:与图的边或弧相关的个数(3)子图:如果图G(V,E)和图G‘(V’,E‘),满足:V’属于V && E’属于E(4)顶点的度: 无向图:与顶点相连的边数 有向图: 入度:以该顶点为头的弧的数目转载 2014-09-23 08:59:06 · 1652 阅读 · 0 评论 -
链表有环问题
判断俩个链表是否相交给出俩个单向链表的头指针,比如h1,h2,判断这俩个链表是否相交。为了简化问题,我们假设俩个链表均不带环。问题扩展:1.如果链表可能有环列?2.如果需要求出俩个链表相交的第一个节点列?原创 2014-09-08 17:22:47 · 1368 阅读 · 0 评论 -
设计包含min函数的栈
设计包含min函数的栈。定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。解析:push和pop都可以做到时间复杂度为O(1),则函数min是关键,如果仅是用一个变量来记录当前最小值,一旦这个最小值被pop出去,便找不到剩下所有变量中的最小值了。我们需要一个辅助栈来记录,原数据栈中按照后进先出的原则,原创 2014-09-08 11:55:05 · 784 阅读 · 0 评论 -
判断整数序列是不是二元查找树的后序遍历结果
判断整数序列是不是二元查找树的后序遍历结果题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 1原创 2014-09-08 18:03:03 · 431 阅读 · 0 评论 -
直接插入排序、希尔排序、堆排序的比较
直接插入排序、希尔排序、堆排序1、之所以把三个排序算法放在一块,是因为他们有相似之处,希尔排序和堆排序都是类似于插入排序,只不过希尔排序是跳着插(按照步长),堆排序是在树中的某一条路径上插。稳定性:首先,排序算法的稳定性通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果A= B, A原来在位置前,排序后A还是要在B位原创 2014-09-04 21:36:11 · 768 阅读 · 0 评论 -
字符串匹配算法--BF、KMP、Sunday
字符串匹配算法1、字符串相关的算法很多,今天总结的是字符串匹配算法,之前已知的有两种算法,一种叫做BF(Brute Force)算法,也就是蛮力算法,就是匹配串和模式串左对齐,不匹配则模式串向右移一个单位,直到匹配或结束,这中间有很多无用的匹配,特别是对匹配串中有重复字符串出现的时候;第二种就是第一种方法的改进,叫做KMP算法,此算法晦涩难懂,但归根结底就两句话,一是找出匹配串的next数原创 2014-09-05 12:26:42 · 739 阅读 · 0 评论 -
二叉树遍历——层次遍历、前中后序遍历(递归、非递归)
二叉树遍历——层次遍历、前中后序遍历(递归、非递归)既然是二叉树,先上图(在百度随便搜索了一个) 先定义二叉树的结构:struct Node{int data;struct Node *lChild;struct Node原创 2014-09-05 15:14:12 · 861 阅读 · 0 评论 -
12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用
出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251。声明:版权所有,转载请注明出处,谢谢。0、前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较转载 2014-09-06 20:10:28 · 1827 阅读 · 0 评论 -
从头说catalan数及笔试面试里那些相关的问题
出处:http://blog.csdn.net/han_xiaoyang/article/details/11938973。声明:版权所有,转载请注明出处,谢谢。0、前言当年博主自己参加校招笔试面试时就遇到过几次catalan数相关的题目,今年又到了互联网招聘季,翻看下近期各大公司的笔试面试题,发现它依旧是很容易被考察的点。尴尬的是,博主自己觉得catalan数相关转载 2014-09-06 20:00:03 · 499 阅读 · 0 评论 -
数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串
出处:http://blog.csdn.net/han_xiaoyang/article/details/11969497。声明:版权所有,转载请注明出处,谢谢。0、前言 这一部分的内容原本是打算在之后的字符串或者数组专题里面写的,但看着目前火热进行的各家互联网公司笔试面试中,出现了其中的一两个内容,就随即将这些经典问题整理整理,单写一篇发上来转载 2014-09-06 20:09:02 · 664 阅读 · 0 评论 -
把二元查找树转变成排序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。解析:等同于将树中序遍历,同时修改每个节点的指针。为便以统一,加上由于左儿子在跟前面遍历输出,右儿子在跟后面遍历输出,我们先定义两个输出的节点,先遍历输出的是preNode,后遍历输出的curNode,那么preNode的右儿子指针指向curNode,curNode的左儿子指针指向p原创 2014-09-08 09:57:58 · 395 阅读 · 0 评论 -
求子数组的最大和
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,因此输出为该子数组的和18。解析:从下标0开始,如果和为正,就一直加下去;否则,舍弃前面的,往后原创 2014-09-08 14:17:39 · 476 阅读 · 0 评论 -
在二元树中找出和为某一值的所有路径
在二元树中找出和为某一值的所有路径题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。原创 2014-09-08 14:39:22 · 375 阅读 · 0 评论 -
查找数组中最大的2个元素及大数据查找
查找数组中最大的2个元素题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,最大的2个元素为7、8。1、可以遍历次数组,同时定义两个变量。原创 2014-09-08 14:54:01 · 1701 阅读 · 0 评论 -
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数。 上排的十个数如下: 【0,1,2,3,4,5,6,7,8,9】举一个例子, 数值: 0,1,2,3,4,5,6,7,8,9 分配: 6,2,1,0,0,0,1,0,0,0 0在下排出现了6次,1在下排出现了2次, 2在下排出现了1次,3在下排出现转载 2014-09-08 15:12:28 · 1385 阅读 · 1 评论 -
求一组数中某个指定的数
假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数组做一次处理,用一种算法找出重复的那个数字。如果你在运算中使用了辅助的存储方式,那么你能找到不用这种方式的算法吗?原创 2014-09-08 17:48:59 · 884 阅读 · 0 评论 -
各种排序算法的稳定性
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 首先,排序算法的稳定性通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,转载 2014-09-04 21:39:09 · 502 阅读 · 0 评论