面试算法题
Captain_MXD
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表中倒数第k个数
问题:求一个链表中的倒数第k个数有两种方法:1.递归: 我们2.快慢指针法:原创 2016-03-30 19:49:55 · 726 阅读 · 0 评论 -
判断链表中有环
如何判断单链表中是否有环思路:找两个指针,一个一下走一步,一个一下走两步。证明:如果两个指针能够碰到一块表示这个链表一定有环。 本质上而言,无非只有三种情况:1.fast和slow指向同一个结点2.fast在slow之前的一个结点3.fast在slow之后的一个结点 fast指针是定要超过,slow指针的,怎么超过呢,超过的前提是两个指针在指向同一个结点之上的。原创 2016-12-17 20:54:44 · 362 阅读 · 0 评论 -
两个树结点的公共祖先
这棵树的前序遍历结果是:1 2 4 0 0 5 0 0 3 6 0 8 0 0 7 0 0前序建立二叉树:void buildTree(Node *&root){ int num; scanf("%d",&num); if(num==0) { root=NULL; return; }原创 2016-04-08 21:46:16 · 625 阅读 · 0 评论 -
KMP算法学习
KMP算法的用来实现字符串匹配,时间复杂度为O(m+n)算法的主要思想:利用匹配串自自身的特点,每次产生不匹配的情况的时候,主串中的坐标不产生回溯,而是让匹配串去适应应该用目标串中哪个字符去匹配:具体思路:那我们应该如何求得,目标串(T)中每个下标对应的next[ ] 数组呢?1.首先 规定 next[0]=-1; 而且 next[1]=原创 2016-09-23 15:25:02 · 379 阅读 · 0 评论 -
反转链表
函数功能:实现链表的反转。 思路:我们在对当前结点作修改时,一定要考虑会不会影响别的结点。如果会,我们就要做出相应的保存。 比如在我们销毁链表时, Node* p=head; while(p) { Node *q=p->next; //因为如果我们单纯的销毁p时会丢失它下一个结点。原创 2016-03-23 20:00:35 · 405 阅读 · 0 评论 -
参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数(里面用的不是快速排序)
#include #include#include/*要求:参考C语言的qsort函数实现一个一个能对任意数据类型(包括结构体)的数组进行排序的函数*/void mysort(void *base,size_t nelem,size_t width,int (*Comp)(const void *,const void *)){ //base 为要排序原创 2016-09-12 17:55:28 · 4158 阅读 · 0 评论 -
01背包问题
01背包问题:有n个重量和价值分别为wi,vi的物品。从这些物品中挑出总重量不超过W的物品,求所有挑选方案中价值总和的最大值记忆化搜索与动态规划:先来看看单纯的递归是怎么写的int func1(int i,int n,int lastWight){ if(i==n) return 0; if(lastWight原创 2016-04-09 17:54:20 · 363 阅读 · 0 评论 -
顺时针打印矩阵
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路,我们按层打印:分别 输出 上 右 下 左 每一条原创 2016-03-28 12:08:56 · 380 阅读 · 0 评论 -
矩阵旋转
矩阵旋转:将相应的元素进行交换就好通过旋转每一层,就可以实现旋转。注意做这类问题,要会画图,代码如下:void turn(int a[5][5],int n,int c){ int temp; //交换 左 上 右 下 for(int i=0;i { temp=a[c][c+i]原创 2016-03-27 22:24:16 · 359 阅读 · 0 评论 -
树中的两个结点之间的距离
/*1) node1是node2的祖先节点或孩子节点,可以理解为两个节点在一条线上。 例如:Dist(2,4), Dist(6,1)2) node1 和 node2 没有直接或间接的父子关系。 例如,Dist(4,3), 他们需要一个共同的祖先节点1 连接起来Dist(n1, n2) = Dist(root, n1) + Dist(root, n2) - 2*Dist(root原创 2016-04-08 22:07:55 · 1400 阅读 · 0 评论 -
数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。double pow(double base,int exp)应该考虑特殊的情况:1) base == 0.0 && exp 2) base==0.0 && exp==0 也没有意义 。第二点:注意判断两个浮点数类型的大小,是原创 2016-03-22 08:08:20 · 325 阅读 · 0 评论 -
重建二叉树
题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。如果题目中所给的前序和中序遍历序列不能构成一棵二叉树,则输出”No”。给出中序和前序我们可以用递归的方式重建二叉原创 2016-03-21 08:14:36 · 378 阅读 · 0 评论 -
跳台阶
问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:1级台阶只有一种跳法,2级台阶有两种跳法。我们考虑第n个台阶最后一步,我们可以跳一阶,也可以跳两阶func(n)=func(n-1)+func(n-2); n>2;func(1)=1;func(2)=2; int fun原创 2016-03-20 16:26:14 · 466 阅读 · 0 评论 -
合并有序链表
对两个有序链表进行合并通过两个链表的头结点的比较,将它们中的一个加入到新的链表中来。Node * merge(Node *one ,Node *two){ if(one==NULL&&two==NULL) return NULL; Node *p=one; Node *q=two; Node *m=NULL;原创 2016-03-30 19:54:52 · 402 阅读 · 0 评论 -
二叉树相关编程题总结
关于二叉树的五道面试题的总结求二叉树的最远两个结点的距离;由前序遍历和中序遍历重建二叉树;判断一棵树是否是完全二叉树;求二叉树两个节点的最近公共祖先;将二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。请仔细阅读代码和注释!!!<一> 求二叉树的最远两个结点的距离本题在上一篇博客中已经进行了详细的实现,下面给出本题的连接:求二叉树的最远两个结点的...转载 2018-06-19 15:15:26 · 690 阅读 · 0 评论
分享