摘要:题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.分析:根据分析可以发现利用快速排序,在根据排序后直接输出前面的K个数。但是该方法需要更改数组的内容,在不能更改的前提下可以利用最常规的分析max的方法。///////////...
阅读全文
摘要:题目:数字中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。分析:首先进行排序,因为大于一半,所以说经过排序之后的数组,如有次数大于的话说明那个数肯定是数组中间的那...
阅读全文
摘要:题目:输入 一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc,acb,bac,bca,cab,cba分析:这个题目完全不会。根据标案分析发现一些细节需要注意,char* 和char[]的区别。//////////////////...
阅读全文
摘要:题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。分析:首先不能创建新的结构,只能在树的前提下进行改变指针的指向。又由于是二叉搜索树,可以通过画图分析可知,二叉搜索树的左子树小于根节点小于右子树,可以发现是个递归过程也是一个中序遍...
阅读全文
摘要:题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复杂一个复杂链表。在复杂链表中,每个节点除了有一个Next指针指向下一个节点外,还有一个Sibling指向链表中的任意节点或者NULL。分析:第一反应是先复制Next,再复制Sibling。...
阅读全文
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字互不相同分析:由后序遍历可以知道最后一个数字是树的根节点,而二叉搜索树的性质可以知道其左边的节点值小于根节点的值,右边的节点值大于根节点的值。由此递归。/*剑指...
阅读全文
摘要:题目:从上往下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。分析:其实就是按层的遍历方式/*剑指offer面试题23*/#include #include using namespace std;struct BinaryTree{ int data; BinaryTree...
阅读全文
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个顺序是否是该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压栈序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但是4,3,5,1,2就不可能是。分析:首先利用图像进行形象化的理解。可以发现其压...
阅读全文
摘要:题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1)/*剑指offer面试题21感觉这道题目答案有点问题。不解!*/#include using namespace std;#define Maxsize 100...
阅读全文
摘要:题目:输入一个矩阵,按照从外向里以顺时针一次打印出每一个数字,例如矩阵{ {1,2,3,4}, {5,6,7,8}, {9,10,11,12}, {13,14,15,16}} 则打印出: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10分析:考虑各个边界/*剑指offer...
阅读全文
摘要:题目:请完成一个函数,输入一个二叉树,该函数输出他的镜像分析:利用图形画出二叉树的镜像进行分析。树是数据结构的重中之重,尤其是树的实现大部分是用递归。好好花点时间琢磨一下,硬伤这是。/*剑指offer面试题19*/#include using namespace std;struct BinaryT...
阅读全文
摘要:题目:输入两颗二叉树A和B,判断B是不是A的子结构。分析:需要先找到data一样的root节点,然后遍历左右孩子,看是否和B节点完全相等。/*剑指offer面试题18树是考察数据结构内功的不二之选一般代码简洁的话就需要用递归。而且由于树运用的指针比较多,一定要检查安全性*/#include usin...
阅读全文
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照递增排序的。分析:考虑两个表是否为NULL。/*剑指offer面试题17太懒没有写链表的创建函数,而是直接创建好。将就看吧!在windows下注释居然不能放在第一行!*/#include using namespace std;...
阅读全文
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头节点。分析:确保输入的链表头指针为NULL或者整个链表就一个节点的情况/*剑指offer面试题16*/#include #include using namespace std;struct ListNode{ ListN...
阅读全文
摘要:题目:输入一个链表,输出该链表中倒数第K个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如一个链表有6个节点,从头节点开始他们的值依次为1,2,3,4,5,6.这个链表的倒数第三个节点是值为4的节点。分析:不能多次遍历链表,只能一次遍历。/*剑指offer面试题1...
阅读全文
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。分析:首先想到的是进行遍历,然后移到后面,但是效率O(n^2)。所以考虑使用首尾指针,可进行直接交换数据。但是这里考虑一下拓展性。/*剑指offer面试题14*/#include...
阅读全文
摘要:题目:给定单向链表的头指针和一个节点的指针,定义一个函数在O(1)时间删除该节点。分析:本题目是基于一个假设,要删除的节点的确在链表中。因为我们需要O(n)的时间来判断该节点是否在链表中。/*剑指offer面试题13本题注意考虑时间效率;考虑删除节点会是否是尾节点,头节点。以及是否为空判断为了保证O...
阅读全文
摘要:题目:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999.分析:本题最关键的部分是当n值非常大的时候会超出数据类型的范围。偷个懒,没有实现打印1,2,3....999.可以利用分割把string分割成char[]。然后单个的char转为int再...
阅读全文
摘要:题目:实现函数double Power(double base,int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。/*剑指offer面试题11比较好的方法是2*2*2*2=4*4这种。*/#include using namespace std;d...
阅读全文
摘要:一般把十进制转化为二进制是除于2.但是除法的效率比移位运算远低的多。所以在实际编程中尽可能用移位运算代替乘除。同样要考虑到负数移位的情况下会出现无限循环。/*剑指offer面试题10当输入的值是负数的时候。例如-2,其结果为31.因为int是占4字节,1个字节位。*/#include using n...
阅读全文