何海涛算法面试题感悟
文章平均质量分 72
闪电侠的博客
追求优雅,简洁的代码
展开
-
何海涛算法面试题感悟之四:二元树…
题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。例如输入整数22和如下二元树 10 / \原创 2012-12-27 11:25:48 · 782 阅读 · 0 评论 -
何海涛算法面试题感悟之一:将二叉…
题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。 比如将二元查找树 10 / \原创 2012-12-27 11:25:39 · 789 阅读 · 0 评论 -
何海涛算法面试题感悟之二:设计包…
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)如果没有min,该栈可以很轻松地构造出来,现在添加了一个min功能,首先想到的是在栈的数据结构里增加一个字段来标识栈中的最小元素,每次入栈的时候将待入栈的数与该最小元素比较,根据结果来做相应的替换,当仔细想一下之后,发现存在这样一种情况:在某一元素出栈之后,假设该元素原创 2012-12-27 11:25:43 · 1058 阅读 · 0 评论 -
何海涛算法面试题感悟之三:子数组…
题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为1, -2, 3, 10,-4, 7, 2, -5,和最大的子数组为3,10, -4, 7, 2,因此输出为该子数组的和18。如果没有O(n)这条要求,那么我们可以通过枚举法,枚举出所有的子数组,然后分别对每个子数原创 2012-12-27 11:25:46 · 1254 阅读 · 0 评论 -
何海涛算法面试题感悟之六:二元查…
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 /\ /\ 5 7 9 11因此返回true。 如果输入7、4、6、5,没有哪棵树的后序原创 2012-12-27 11:25:52 · 1039 阅读 · 0 评论 -
何海涛算法面试题感悟之七:翻转句…
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。 例如输入“I am a student.”,则输出“student. a amI”。 这道题目算法并不是很难,但是却考察了程序员的基本素养即字符串的操作,如何用最基本的类型(字符类型)来操作一个字符串。算法的思想是先把句子中所有的字符都颠倒,然后原创 2012-12-27 11:25:54 · 1293 阅读 · 0 评论 -
何海涛算法面试题感悟之五:查找最…
题目:输入n个整数,输出其中最小的k个。例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。一个简单的方法就是排序,先将这n个数按从大到小排序,最快需要O(nlogn)的时间,然后可以在O(1)时间内将K个数取出,显然这不是我们想要的结果。我们可以给出一个容器,这个容器刚好能存放k个数,依次扫描N个整数,如果容器里数的个数小于K,那么直接将当前扫描到的整数存原创 2012-12-27 11:25:50 · 992 阅读 · 0 评论 -
何海涛算法面试题感悟之九:寻找链…
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下:structListNode{ int m_nKey; ListNode* m_pNext;};这里,我们有两种思路,一种是遍历所有的单向链表,得到链表的长度n,然后第二次遍历该链表,找到正数第n-k+1个节点即可,这种思路的缺点是要两次遍历所有的节原创 2012-12-27 11:25:56 · 842 阅读 · 0 评论