剑指offer
cdwxx1234
这个作者很懒,什么都没留下…
展开
-
【剑指offer】正则表达式匹配
题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。分析:想到的方法就是递归了。首先模式的第二个字符是’*’时,若str字符和模式字符相等或str原创 2017-07-20 22:55:57 · 176 阅读 · 0 评论 -
【剑指offer】构建乘积数组
题目:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。分析:此题一上来就用的2层循环,虽然也能做出来,但是时间复杂度是O(n2),因此想着能不能优化一下算法,减少时间复杂度。参考了别人的思想,自己用程序实现。思想很简单,我们用2个数组a,b,原创 2017-07-06 20:09:17 · 252 阅读 · 0 评论 -
【剑指offer】链表中环的入口结点
题目:一个链表中包含环,请找出该链表的环的入口节。分析:做此题我们想到一个链表有环,环中有n个节点,这样我们用2个指针分别指向第一个节点和第n+1个节点,同步向后运动,当指向同一个节点的时候就是环的入口节点。当然我们首先要求出链表中环包含几个节点,还是用两个指针,一个运动快,一个运动慢,有环就会相遇。相遇节点必然在环的一个节点,我们从相遇节点开始,循环一周就知道环的节点个数。要做此题共需3个阶原创 2017-07-08 23:55:32 · 286 阅读 · 0 评论 -
【剑指offer】按之字形顺序打印二叉树
题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。分析:做这个题之前首先要会二叉树的层序遍历,相信我们已经很熟悉二叉树的层序遍历了。我的层序遍历方法是先把二叉树上一层节点从左到右依次加入容器中,然后依次遍历每个节点,在容器中加入每个节点的左、右孩子节点,同时删除该节点,这样遍历完以后,容器中只有原创 2017-07-09 23:34:22 · 361 阅读 · 0 评论 -
【剑指offer】数组中只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析:我们都做过一个数组中除一个数字外,其他都出现2次的题目,很简单,我们只需要所有的元素相异或就可以了。但现在是2个数,异或的结果是2个数的异或结果,而其他的元素都出现2次,异或后为0。如果要是只有一个单独的数的话我们就会做,那么我们能不能把2个数的情况转化为1个数的情况呢?答案是肯定的。所有元原创 2017-07-12 21:02:41 · 352 阅读 · 0 评论 -
【剑指offer】和为S的连续正整数序列
题目:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!分析:做这一题我们定义整数left和right原创 2017-07-12 22:39:37 · 363 阅读 · 0 评论 -
【剑指offer】二叉树的深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。方法一分析:主要思想就是层序遍历,就是有遍历上一层的每一个节点,得到下一层的所有节点,再有下一层的节点得到下下层的所有节点,直到下层的节点个数为0时结束。 int TreeDepth(TreeNode* pRoot) { if(!pRoot原创 2017-07-15 14:27:07 · 372 阅读 · 0 评论 -
【剑指offer】平衡二叉树
题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析:二叉树性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。从二叉树的性质入手,求出根节点的左右孩子的深度,如果差大于1就直接返回false,否则判断左右子树是否为平衡二叉树,递归重复上面的过程,求子树的深度用的是层序遍历的思想。程序:int deep(TreeNode *proot)原创 2017-07-15 15:46:43 · 263 阅读 · 0 评论 -
【剑指offer】二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。分析:题目不能新建新的节点,只能用原有的节点来实现。我们知道对收索二叉树的中序遍历后正好是从小到大顺序遍历的,因此我想到先对二叉树中序遍历,把节点保存起来,然后在遍历每个节点,使其left指向前一个节点,right指向后一个节点。程序:void midiorder(Tre原创 2017-07-15 22:13:52 · 234 阅读 · 0 评论 -
【剑指offer】字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。无重复字符串排列分析:全排列首先想到的是递归方法。给一个没有重复的字符串,把它拆分成两部分:第一个字符和剩下的字符。把第一个字符和剩下的每一个字符依次交换位置,每次交换位置后相当于确定了第一个位置,还需要继续确定剩余原创 2017-07-16 19:20:35 · 161 阅读 · 0 评论 -
【剑指offer】翻转单词顺序列
题目:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?方法一分析:我们可以先把整原创 2017-07-17 14:13:42 · 462 阅读 · 0 评论 -
【剑指offer】二叉树的下一个结点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。分析:这个题目需要我们考虑多种情况,1.考虑有没有右孩子;2.有右孩子,考虑右孩子有没有左孩子;3.没有右孩子,考虑是否存在一个祖父节点,且该节点是其父节点的左孩子;以上情况都考虑清楚了,题目自然就解决了。程序:TreeLinkNode* GetN原创 2017-07-17 16:54:17 · 182 阅读 · 0 评论 -
【剑指offer】把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析:题目要求比较整数数组组成后的数的大小,在int及long中来处理很容易超出范围,实际上大数问题一般放在字符串中来处理。我们把数组元素两两比较,比较的方法是两个数a、b,若ab>ba,就规定a>b,否则as原创 2017-07-18 16:16:17 · 162 阅读 · 0 评论 -
【剑指offer】重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析:这道题看着难,其实我们仔细分析就发现也不是很难。给了前序和中序遍历的数组,返回二叉树的根节点。我们根据根节点的位置,分别求出左、右子树的前序、中序数原创 2017-07-18 22:14:45 · 156 阅读 · 0 评论 -
【剑指offer】树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析:要做题,先要理解题目的意思。首先我们先理解什么是子结构,这里的子结构不是说B只有根节点和A的某一节点相连接,而是B中可能有2个以上的节点和A中节点相连接。还有一点,A中可能有多个节点值和B的根节点的值相同,所以可能要找出所有A中节点值和B根节点值相同的情况,直到判定B是A的子结构时结束。我的方原创 2017-07-19 10:59:14 · 173 阅读 · 0 评论 -
【剑指offer】二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析:我们分析一下问题就能发现规律,首先把一个数组分成三部分,一个根节点,一个根节点的左子树,一个根节点的右子树。然后把左子树和右子树分别再分为3部分,明显要用到递归,递归出口是数组里只有一个元素或左子树不全小于根节点值、右子树不全大于根节点值。程原创 2017-07-19 13:30:22 · 227 阅读 · 0 评论 -
【剑指offer】顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵 1 2 3 4 5 6 7 8 9 10 11 1213 14 15 16 则依次打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10分析:做这道题需要我们缜密的逻辑思维,只要我们细心点都是可以做出来的。我的做题思路是首先原创 2017-07-06 10:57:03 · 272 阅读 · 0 评论