面试题
仅是路过
这个作者很懒,什么都没留下…
展开
-
面试题:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。
为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。代码如下:#include #include using namespace std;int main(){ int n,i,j; char str[100]; cin>>n; getchar(); while(n--) { gets(s原创 2013-07-17 16:16:18 · 5865 阅读 · 0 评论 -
面试题:求最小的K个数。
这是编程之美上面的一道题,书中介绍了几种思路,当所要寻找的数据为海量时,普通的数组存不下,因为k一般不会太大,这时候我们可以建立一个容量为k的最大堆,遍历整个数列,不断更新堆顶元素并维护最大堆,当遍历完整个数列后,最大堆中的元素就是最小的K个数,该算法时间复杂度为n*logk。 下面我要说的是当所求的数据不是海量的时候,我们可以选择用一种类似快排的快速选择算法来实现,总的时间复杂度能原创 2014-01-08 21:43:46 · 630 阅读 · 0 评论 -
面试题:链表翻转。
1、链表翻转。给出一个链表和一个数k,比如链表1→2→3→4→5→6,k=2,则翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→6→5,用程序实现。思路: 将长度为k的一段从链表中截取,分别进行翻转,后面不足K的部分按不足的节点数翻转。//*Next代表节点所需要指向的点以及截出来的一段的指向的指针,*pre代表原创 2013-12-31 18:42:13 · 635 阅读 · 0 评论 -
面试题:单链表就地逆置
#include #include #include #include #include using namespace std;struct ListNode { int m_nKey; ListNode* m_pNext; }; void NewSet(ListNode *&Head, int n) { ListNode *t;原创 2013-10-25 15:10:44 · 561 阅读 · 0 评论 -
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / \ 6 10/ \ / \5 7 9 11输出8 6 10 5 7 9 11。解题思路:利用队列先进先出(FIFO)的性质,取出队首元素,输出队首节点元素,将节点的左右子节点加入队列,取出队首元素,重复上述操作,直到取出队列中所有元素。原创 2013-09-24 21:13:52 · 2511 阅读 · 1 评论 -
面试题:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点。 用递归和循环两种方法完成树的镜像转换。
题目: 输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入: 8 / \6 10 /\ /\5 7 9 11输出: 8 / \ 10 6 /\ /\11 9 7 5定义二元查找树的结点为:struct B原创 2013-09-23 11:17:12 · 885 阅读 · 0 评论 -
面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。链表结点定义如下: struct ListNode{ int m_nKey; ListNode* m_pNext;};解题思路: 使用两个指针,p1,p2,先把p1的指针指向第k个元素,然后p1和p2同时向后遍历,当p1遍历到结尾时,p2正好原创 2013-09-20 10:21:28 · 2662 阅读 · 0 评论 -
面试题:求二叉树中节点的最大距离
#include #include using namespace std;#define maxn 0x3ffffffint max1;struct node{ int num; //二叉树中该节点的值 int longest_val; //以该节点为根离子树中的最大距离 int second_val; //以该节点为根离子树中的第二大距离原创 2013-07-19 10:56:25 · 705 阅读 · 0 评论 -
面试题:判断整数序列是不是二元查找树的后序遍历结果
输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。解题思路:原创 2013-07-17 10:22:14 · 709 阅读 · 0 评论 -
面试题:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。
例如输入整数22和如下二元树 10 / \ 5 12 / \ 4 7则打印出两条路径:10, 12和10, 5, 7。二元树节点的数据结构定义为:struct BinaryTreeNode{int data;BinaryTreeNode *pLeft;BinaryTreeNode *pRight;};原创 2013-07-11 10:42:59 · 3305 阅读 · 3 评论 -
面试题:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素,要求函数min,push及pop的时间复杂度都是O(1)
思路: 在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。但是仅仅只添加一个成员变量存放最小元素(或最小元素的位置)是不够的,因为如果当前最小元素被pop出去,如何才能得到下一个最小元素?所以我们需要一个辅助栈。每次push一个新元素的时候,同时将最小元素(或最小元素的位置。考虑到原创 2013-07-10 10:15:32 · 4477 阅读 · 2 评论 -
面试题:把二元查找树转变成排序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。10/ \6 14/ \ / \4 8 12 16转换成双向链表4=6=8=10=12=14=16。首先我们定义的二元查找树节点的数据结构如下:struct BSTreeNode{int m_nValue; // value of nodeBS原创 2013-07-09 16:14:43 · 550 阅读 · 0 评论 -
重建二叉树
输入某二叉树的前序遍历和中序遍历结果,重建出二叉树。 对于这个问题,我们首先要明白二叉树的性质,在二叉树的前序遍历中,第一个数子总是树的根节点的值,在中序列中,根节点的值总在序列的中间,而在后序遍历中,根节点的值总是在序列的最后一个。因此我们需要扫描中序遍历序列,才能找到根结点的值,并不断递归得分成左右两部分,下面是实现代码:#include #include #include原创 2014-01-23 18:54:44 · 617 阅读 · 0 评论