简述树的深度优先及广度优先遍历算法,并说明非递归实现。原题出自百度的笔试:当时我看到这个题目的时候,已经完全记不得非递归算法该怎么实现了,后来查阅了一下,要用到两个辅助的数据结构:深度优先遍历--->栈;广度优先遍历--->队列;这里以二叉树为例来实现。import
java.util.ArrayD...
分类:
其他好文 时间:
2014-05-20 02:33:07
阅读次数:
425
题目链接题意: 给出单链表, 判断是否存在环.方法就是大步小步...附上代码: 1 /** 2 *
Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 *
ListNode *next...
分类:
其他好文 时间:
2014-05-20 01:46:54
阅读次数:
308
题意:一张n*m的网格内每个点有话费,还有若干个宝藏,问一个人要走进去拿走所有宝藏在走出来的最小花费。思路:看宝藏只有13个直接想到了状压dp[i][j]拿了哪几个前一个为j的最小花费,先bfs+优先队列预处理出最短路,然后记忆化搜索就可。代码如下:
1 /********************....
分类:
其他好文 时间:
2014-05-19 23:26:38
阅读次数:
352
题目:移除linked-list从尾到头的第N个元素自我思路:因为题目给出的N是从链表尾开始计算的,单链表不存在从子指向父亲的反向指针,因此我先计算链表的整个长度len,然后用len
- N来表示正向被删除元素所在的位置。代码:public ListNode removeNthFromEnd(Lis...
分类:
其他好文 时间:
2014-05-19 20:54:33
阅读次数:
378
刚开始,我想到的是一种笨方法,先遍历单链表,计算出单链表的长度len,然后再从头遍历单链表到第len-k个节点,那么这个节点既是单链表的倒数第k个节点。
不过这种算法时间复杂度挺高的,还有一种更简单的方法,就是设置两个指针,分别指向单链表的头节点,然后让其中一个指针,先走k步,之后...
分类:
其他好文 时间:
2014-05-19 11:40:44
阅读次数:
359
栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO)。栈能够将递归问题转化为非递归问题,这是它的一个重要特性。除了FILO、FIFO这样的最普遍存取方式外,还有一些扩展的数据结构,如双端队列、双栈、超队列、超栈等,它们是一种扩展与变异结构。
线性表有...
分类:
编程语言 时间:
2014-05-19 11:36:46
阅读次数:
369
出题:把二元查找树转变成排序的双向链表。输入一棵二元查找树,要求将该二元查找树按照中序转换成一个排序的双向链表,要求不能创建任何新的节点,只能调整指针的指向;分析:递归的思路,当前节点需要进行的处理,并使用递归调用和返回值将子问题链接起来;首先明白二元查找树的特性,变成有序双向链表后当前根节点的左节...
分类:
其他好文 时间:
2014-05-19 10:02:49
阅读次数:
381
输入两个链表,找出他们的第一个公共结点。思想:我们可以先遍历一次得到分别得到两个链表的长度,然后计算得出长度差n,那么让较长的链表先走n步,然后两个链表一起向后走,直到两个指针指向同一个结点。这个结点就是我们要找的
结点。
分类:
其他好文 时间:
2014-05-17 14:19:43
阅读次数:
231
我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i]的形式,其中f[j]中保存了只与j相关的量。这样的DP方程我们可以用单调队列进行优化,从而使得O(n^2)的复杂度降到O(n)。可是并不是所有的方程都可以转化成上面的形式,举个例子:dp[i]=dp[j]+(x[i]-x[j])*(x[i...
分类:
其他好文 时间:
2014-05-17 14:19:06
阅读次数:
214
线性表的定义:N个数据元素的有限序列
线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表)
顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an)
链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构
看到顺序存储结构的图示,我们可能会马上联想到C语言的数组...
分类:
编程语言 时间:
2014-05-16 01:43:08
阅读次数:
359