摘要: Q:有一个复杂链表,其结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任一结点或者NULL。请完成函数ComplexNode* Clone(ComplexNode* pHead),以复制一个复杂链表。 A:一开始想这道题毫无思路,如果蛮来,首先创建好正常的链表,然后考虑sibling这个分量,则需要O(n^2)的时间复杂度,然后一个技巧便可以巧妙的... 阅读全文
posted @ 2012-06-19 20:39 Cavia 阅读(4439) 评论(1) 推荐(1) 编辑
摘要: Q:输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。 A:对于一个子树的根结点来说,如果那两个结点分别位于该子树的左右子树,则最低共同父结点为该子树的根结点,如果那两个结点都位于该子树的左子树,则最低共同父结点位于该子树根结点的左子树,否则来自右子树。于是递归代码就出来了。 struct Node{ int val; Node *left,*right;};Node* ... 阅读全文
posted @ 2012-06-19 19:41 Cavia 阅读(1377) 评论(0) 推荐(0) 编辑
摘要: Q:题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 A:如果将数组排序,则相同的数字肯定会在一起,因为该数字的个数超过数组长度的一半,所以该数字组成的子数组肯定会跨过数组的中间位置,所以直接返回arr[n/2]即可。不过这个方法需要先排序。 在考虑另一种方案,如果每次删除两个不同的数字,则在剩下的数组中该数字出现的次数仍然超过一半,所以就把该问题转化为一个规模更... 阅读全文
posted @ 2012-06-19 16:18 Cavia 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 上图表示一个trie树,有abc,abcd,abd,b,bcd,efg,hii七个字符串,红色点代表为一个字符串的最后一个字符。 上图同样表示一个trie树,有abc,d,da,dda四个字符串,字符串尾部同样进行了标记。 已知n个由小写字母构成的平均长度为10的字符串,判断其中是否存在某个串为另一个串的前缀子串,有三种方法: 1、遍历字符串集合,对于遍历的每两个字符串,判断其... 阅读全文
posted @ 2012-06-19 15:19 Cavia 阅读(272) 评论(0) 推荐(0) 编辑
摘要: Q:实现函数double Power(double base, int exponent),求base的exponent次方。不需要考虑溢出。 A:这是一道很简单的题,但是考虑全面和优化代码却不是那么容易,一开始乍一看可能就写出这样的代码 double Power(double base,int exponent){ double result=1.0; for(int ... 阅读全文
posted @ 2012-06-19 09:38 Cavia 阅读(209) 评论(0) 推荐(0) 编辑