随笔分类 -  面试算法

摘要:1.简述链表和数组的区别 1.(数组访问数据容易,插入和删除难)数组是将元素在内存中连续存放,可以通过下标迅速访问数组中任何元素。但如果要在数组中增加或删除一个元素,需要移动大量元素。 (链表访问数据要遍历,插入删除易)链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。(增加和 阅读全文
posted @ 2018-03-20 19:15 Curo 阅读(241) 评论(0) 推荐(0) 编辑
摘要:两个栈实现一个队列 方法一:我们先来说最笨的一种方法:倒栈 大多数人的思路是:始终维护s1作为存储空间,以s2作为临时缓冲区。 入队时,将元素压入s1。 出队时,将s1的元素逐个“倒入”(弹出并压入)s2,将s2的顶元素弹出作为出队元素,之后再将s2剩下的元素逐个“倒回”s1。 见下面示意图: 不得 阅读全文
posted @ 2018-03-20 18:00 Curo 阅读(647) 评论(0) 推荐(0) 编辑
摘要:一.顺序队列的改进 队列元素的出列是在队头,即下标为0的位置,那也就意味着,队列中的所有元素都得向前移动,以保证队列的队头(也就是下标为0的位置)不为空,此时的时间复杂度为0(n)。 可有时想想,为什么出队列时一定要全部移动呢,如果不去限制队列的元素必须存储在数组的前n个单元这一条件,出队的性能就会 阅读全文
posted @ 2018-03-20 13:01 Curo 阅读(10471) 评论(1) 推荐(3) 编辑
摘要:还有一篇也很好的文章,讲了字典序和递归分治两种算法:http://blog.csdn.net/jopus/article/details/18998403 1.全排列的定义和公式: 从n个数中选取m(m<=n)个数按照一定的顺序进行排成一个列,叫作从n个元素中取m个元素的一个排列。由排列的定义,显然 阅读全文
posted @ 2018-02-01 20:59 Curo 阅读(3802) 评论(0) 推荐(0) 编辑
摘要:以阶乘为例说明递归的工作原理: long ff(int n) { long f; if(n<0) printf("n<0,input error"); else if(n==0||n==1) f=1; //为什么f=1,就不再继续递归调用? else f=ff(n-1)*n;//这一步到底是怎么工作 阅读全文
posted @ 2018-02-01 20:38 Curo 阅读(4774) 评论(0) 推荐(0) 编辑
摘要:求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去执行① 例如求27和15的最大公约数过程为: 27÷15 余1215÷12余312÷3余 阅读全文
posted @ 2018-02-01 15:32 Curo 阅读(5342) 评论(0) 推荐(0) 编辑
摘要:题目:如何判断单链表里面是否有环? 方法一:快慢指针法 设两个工作指针,一个快一个慢,如果有环的话,它们会必然在某点相遇。 为什么当单链表存在环时,p和q一定会相遇呢? 假定单链表的长度为n,并且该单链表是环状的,那么第i次迭代时,p指向元素i mod n,q指向2i mod n。因此当i≡2i(m 阅读全文
posted @ 2018-01-22 19:57 Curo 阅读(1637) 评论(0) 推荐(0) 编辑
摘要:概念部分转载于http://blog.csdn.net/zwhlxl/article/details/45745825 问题描述 判断两个单链表是否相交,如果相交,给出相交的第一个点 一.两个链表都不存在环相交的 链表示意图如下所示。 解题思路 方法一 两个没有环的链表如果是相交于某一结点,如上图所 阅读全文
posted @ 2018-01-22 18:24 Curo 阅读(819) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示