剑指offer面试题
剑指offer面试题解答
while_false_
一起来刷题呀
展开
-
剑指offer面试题3:数组中重复的数字
题目一:找出数组中重复的数字在一个长度为n的数组里的所有数字都在0~n-1范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数组重复了几次。请找出数组中任意一个重复的数字。例如:{2,3,1,0,2,5,3}output: 2 or 3思路:扫描到下标为i的数字是,判断是否与num[i]的值相等,相等则继续扫描,否则与num[num[i]] 交换位置,继续判断值是否和...原创 2019-02-25 17:03:41 · 129 阅读 · 0 评论 -
剑指offer作者--何海涛的日志
附上链接:http://zhedahht.blog.163.com原创 2019-02-25 11:36:08 · 695 阅读 · 0 评论 -
剑指offer面试题38扩展:八皇后问题--递归解法
题目:在8*8的国际象棋上摆上8个皇后,使其不能互相攻击,即任意两个皇后不得处在同一行,同一列或者同一条对角线上。思路:由于8个皇后不能处在同一行,那么肯定是每一个皇后占据一行。我们可以定义一个数组ColumnIndex[8],数组值表示第i行皇后的列号。先把数组用0-7初始化,然后对数组进行全排列。只需要判断每一个排列对应的8个皇后是不是在同一条对角线上也就是对于数组的两个下标 i 和 j ,...原创 2019-02-21 10:43:02 · 709 阅读 · 0 评论 -
剑指offer面试题38:字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则打印由字符a,b,c所能排列出来的所有字符串:abc,acb,bac,bca,cab,cba思路:两步:首先求出所有可能出现在第一个位置的字符,即把第一个字符和后面所有的字符交换。第二步固定第一个字符,求后面所有字符的排列。这个时候我们仍把后面的所有字符分成两部分:后面字符的第一个字符,以及这个字符之后的所有字符。然...原创 2019-02-20 11:36:44 · 170 阅读 · 0 评论 -
剑指offer面试题37:序列化二叉树
题目:请实现两个函数,分别用来序列化和反序列化二叉树序列化思路:可以根据前序遍历的思路来序列化二叉树void Serialize(BinaryTreeNode *pRoot) { if (NULL == pRoot) { printf("$"); return; } printf("%d,",pRoot->m_nValue); Serialize(pRoot->m...原创 2019-02-20 10:10:33 · 117 阅读 · 0 评论 -
剑指offer面试题36:二叉搜索树与双向链表
题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何的新的节点,只能调整树中节点指针的指向。思路:首先,我们知道:在二叉树中,每个结点都有两个指向子结点的指针。在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个结点。其次,由于要求转换之后的链表是排好序的,我们可以中序遍历树中的每一个结点,这是因为中序遍历算法的特点是按照从小到大的顺序遍历二叉树的...原创 2019-02-19 13:55:10 · 186 阅读 · 0 评论 -
剑指offer面试题35:复杂链表的复制
题目:请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext指针指向下一个节点,还有一个m_pSlbling指针指向链表的任意节点或者nullptr。思路:方案一:哈希表(需要O(N)的辅助空间)方案二:第一步,复制链表节点连接在被复制节点后;第二步,复制m_pSibling指针...原创 2019-02-18 16:57:50 · 142 阅读 · 0 评论 -
剑指offer面试题34:二叉树中和为某一值的路径
题目: 输入一棵二叉树和一整数,打印出二叉树节点中和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成的一条路径。思路:使用前序遍历二叉树,将访问到的节点放入栈中,并累加栈中路径的权值,如果栈顶为页节点并且和为输入的整数,则打印该路径。若果不是页节点,则继续访问子节点。当前节点访问结束后,函数自动递归回到父节点,此时,因在函数退出之前要在已入栈的路径上删除当前节点并减去该节点...原创 2019-02-18 15:17:23 · 122 阅读 · 0 评论 -
剑指offer面试题33:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历序列结果。是返回true,否则返回false。思路: 由二叉树搜索树的性质可知,数组的最后一个数为二叉搜索树的根节点,则左子树的值都小于根节点,右子树的值都大于根节点,找出左右子树,判断是否符合二叉搜索树的性质,然后递归遍历左右子树看是否符合。bool VerifySquenceOFBST(int sequence[], int l...原创 2019-02-18 11:36:36 · 257 阅读 · 0 评论 -
剑指offer面试题31:栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出序列。假设压入栈的所有数组均不相等。例如:序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列的一个弹出序列,但{4,5,3,1,2}就不可能是该压栈序列的弹出序列。思路:建立一个辅助栈,规律如下:如果下个弹出的数字是栈顶数字,那么直接弹出;如果下个弹出的数字不在栈顶,直到把下个需要...原创 2019-02-14 15:59:56 · 124 阅读 · 0 评论 -
剑指offer面试题30:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能能够得到栈的最小元素的min函数。在该栈中,调用min,push,pop时间复杂度都是O(1).思路:创建一个辅助栈(主栈每次压栈或出栈,辅助栈每次压入最小值,出栈),主栈压入的值与辅助栈顶的作比较,若value>栈顶的值,则辅助栈压入栈顶的值,否则,压入value.#define STACK_SIZE 1024typedef struct...原创 2019-02-14 14:48:44 · 134 阅读 · 0 评论 -
剑指offer面试题29:顺时针打印矩阵
题目:输入一个矩阵,按照从外向里顺时针的顺序依次打印出每一个数字。例子:1 2 3 45 6 7 89 10 11 1213 14 15 16打印数字:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10思路:1、把矩阵看成由若干个顺时针方向的圈组成,循环打印圈的条件:columns>startX * 2 并且 rows>startY * 2vo...原创 2019-02-14 10:24:12 · 159 阅读 · 0 评论 -
剑指offer面试题28:对称的二叉树
题目:请实现一个函数,用来判断一个二叉树是不是对称的。思路:前序遍历算法的对称算法(先左子树后右子树–先右子树后左子树),若两个遍历算法得出的一致,则为对称二叉树。bool isSymmetrical(BinaryTreeNode* pNode) { return isSymmetricalfuntion(pNode, pNode);}bool isSymmetricalfuntion...原创 2019-02-13 11:28:47 · 99 阅读 · 0 评论 -
剑指offer面试题27:二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出他的镜像。二叉树节点定义如下:struct BinaryTreeNode{int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};思路:前序遍历树的每个节点,若该节点有非空子节点,则交换两个子节点。void MirrorRecursively(B...原创 2019-02-13 11:14:33 · 157 阅读 · 0 评论 -
剑指offer面试题32:从上到下打印二叉树
题目一:不分行从上到下打印二叉树。从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。二叉树节点定义如下:struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight;};思路:相当于...原创 2019-02-14 17:54:39 · 157 阅读 · 0 评论