E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
offer-算法之道
剑指
offer-
面试题64:数据流中的中位数
题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是就是所有数值排序后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路:问题本身不难,关键在于采取哪种数据结构和算法。(1)如果用未排序的数组实现,那么插入的时间复杂度为O(1),查找的时间复杂度为O(n)(半快速排序法);(2)如果是排序的数组,那么插入的时候要维护顺序
moses1213
·
2016-05-06 20:00
剑指
offer-
面试题63:二叉搜索树的第K个结点
题目:给定一棵二叉搜索树,请找出其中的第K大的结点。例如下图中的二叉树,按加点数值大小顺序第三个结点的值是4。思路:二叉搜索树的一个重要性质就是它的中序遍历是排序的,因此这道题目只需要用中序遍历算法遍历一棵二叉搜索树,就很容易找出它的第K大结点。中序遍历用递归实现比较容易,但要想清楚的是遍历到一个根结点的时候要做的是什么?中序遍历二叉树打印的时候我们在递归完左子树之后打印根结点,本题目要求的当然不
moses1213
·
2016-05-06 11:00
剑指
offer-
面试题62:序列化二叉树
题目:请实现两个函数,分别用来序列化和反序列化二叉树。思路:题目的要求似乎不是太清晰,实际上就是用序列来表示一棵二叉树,然后还可以根据这个序列重建二叉树。对于上图中的树,以前序遍历为例,先访问到1,然后2,然后4,4的左右子结点都为空,可以用一个特殊字符替代,譬如用$,所以上图中的二叉树前序遍历表示就是“1,2,4,$,$,$,3,5,$,$,6,$,$"。 重建的时候,访问的第一个结点为根结点
moses1213
·
2016-05-05 17:00
剑指
offer-
面试题61:按之字形顺序打印二叉树
题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。上图按之字形打印的结果为:13 24 5 6 715 14 13 12 11 10 9 8思路:对于奇数层和偶数层,它们的打印顺序是不一样的。打印第一层的时候将第二层数据保存,打印第二层的时候保存第三层的数据,上一层打印完
moses1213
·
2016-05-05 11:00
剑指
offer-
面试题60:把二叉树打印成多行
题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。例如,打印下图中的二叉树的结果为: 8 6 10 5 7 9 11思路:前面讲过如何从上往下按层打印二叉树,这里需要加入换行问题。引入两个变量:一个变量表示在当前层中还没有打印的结点数,另一个变量表示下一层结点的数目。voidPrint(BinaryTreeNode*pRoot) { if(
moses1213
·
2016-05-02 20:00
剑指
offer-
面试题59:对称的二叉树
题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。思路:如果一个树是对称的,那么它的前序遍历和它的前序遍历的对称遍历是一致的。所谓前序遍历的对称遍历,即遵循根结点-右子结点-左子结点的遍历顺序,如果树是对称的,那么两种结果应该完全一样。 实际上不按书上的思路也是可以的,先比较根结点的左右子结点,根据每个结点是否存在可以分为几种情况,然后比较下一层
moses1213
·
2016-05-02 17:00
剑指
offer-
面试题58:二叉树的下一个结点
题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。思路:举一个例子,容易发现规律。这个问题可以分为两种情况:(1)结点存在右子结点,那么中序遍历的下一个结点就是它的右子结点。(2)结点不存在右子结点,这里又要考虑两种情况:一是结点本身作为左子结点,那么它的下一个结点就是它的父结点;二是结点本身作为它的
moses1213
·
2016-05-02 15:00
剑指
offer-
面试题57:删除链表中重复的结点
题目:在一个排序的链表中,如何删除重复的结点?例如1->2->3->3->4->4->5删除重复结点后为1->2->5。思路:题目看似很简单,但要写出无bug鲁棒性好的代码其实有一定难度。首先重复结点可能出现在头结点,如果要修改头结点的指针,那么传入的参数应该为指针的指针,即指向头结点指针的指针。对于重复结点,处理的过程是先找到后面的第一个不等于当前结点的结点,然后将当前结点的前一个结点指向这个结
moses1213
·
2016-05-02 10:00
剑指
offer-
面试题56:链表中环的入口结点
题目:一个链表中包含环,如何找出环的入口结点?例如下图的链表中,环的入口结点是结点3。 思路:受面试题15的启发,可以用两个指针来解决这个问题。定义p1和p2两个指针,均指向链表的头结点,如果链表中的环有n个结点,指针p1现在链表上向前移动n步,然后两个指针以相同的速度向前移动。当第二个指针指向环的的入口结点时,第一个指针已经围绕着环走了一圈又回到了入口结点。为什么是p1先走n步?书上这里略
moses1213
·
2016-04-27 20:00
剑指
offer-
面试题55:字符流中第一个不重复的字符
题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是‘g'。当从该字符流中读出前六个字符"google"时,第一个只出现一次的字符是'l'。思路:这道题和面试题35非常相似,只不过那里是字符串这里变成字符流,动态的返回的只出现一次的结果。仍然采用哈希表来解决这个问题,用大小为256的数组来模拟哈希表,在面试题35那里我们
moses1213
·
2016-04-26 21:00
剑指
offer-
面试题54:表示数值的字符串
题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、"5e2"、"-123"、“3.1416”及“-1E-16”都表示数值,但"12e“、”1a3.14"、“1.2.3”、“+-5”及“12e+5.4”都不是。思路:表示数值的字符串遵循如下模式:[sign]integral-digits[.[fractional-digits]][e|E[sign]expo
moses1213
·
2016-04-26 19:00
剑指
offer-
面试题53:正则表达式匹配
题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"匹配,但与“aa.a"及"ab*a"均不匹配。 思路:我们从头遍历字符串与模式,如果第一个字符串相等,那么指针可能同时后移,也可能不移,问题在于模式的第二个字符是
moses1213
·
2016-04-26 16:00
剑指
offer-
面试题52:构建乘积数组
题目:给定一个数组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],不能使用除法。思路:如果可以使用除法,这道题目很简单,但是要求不能使用!换一种思路,把B[i]拆分成两部分,A[0]*A[1]*…*A[i-1],这是一个累乘的过程,如果乘积用C[i]表示,有C[i]=C[i-1]*A[i
moses1213
·
2016-04-25 20:00
剑指
offer-
面试题51:数组中重复的数字
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或3。思路:数组中的数字都在0到n-1的范围内,如果这个数组中没有重复的数字,“那么当数组排序之后数字i将出现在下标为i的位置”书上这段原话
moses1213
·
2016-04-25 17:00
剑指
offer-
从尾到头打印链表
输入一个链表,从尾到头打印链表每个节点的值。 输入描述: 输入为链表的表头输出描述: 输出为需要打印的“新链表”的表头/***structListNode{*intval;*structListNode*next;*ListNode(intx):*val(x),next(NULL){*}*};*/classSolution{public:vectorprintListFromTailToHead(
Aifeng1214
·
2016-04-23 21:01
剑指offer
剑指
offer-
替换空格
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为WeAreHappy.则经过替换之后的字符串为We%20Are%20Happy。//思路:从左开始依次遍历字符串,遇到空格时从右开始复制前面的字符串classSolution{public:voidreplaceSpace(char*str,intlength){for(inti=0;ii;pos--)//pos-2,要注意{s
Aifeng1214
·
2016-04-23 21:12
剑指offer
剑指
offer-
二维数组中的查找
二维数组中的查找在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。输入描述:array:待查找的二维数组target:查找的数字输出描述:查找到返回true,查找不到返回false。//思路:利用数组特性从左下角开始与target比较。classSolution{public:boo
Aifeng1214
·
2016-04-23 20:41
剑指offer
剑指
offer-
面试题47:不用加减乘除做加法
题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:四则运算都不能用只能位运算了。其实第一想法就是位运算,位运算转换成二进制才能看出规律,这步是关键!例如4+7,二进制是101+111,考虑二进制的加法,先不考虑进位,101+111结果是010,很明显各个位上做了异或运算。下一步考虑进位,最低位和最高位都产生了进位,进位的结果是1010,最低位产生的进位左移了
moses1213
·
2016-04-23 10:00
剑指
offer-
面试题46:求1+2+…+n
题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。方法一:利用构造函数求解。程序不让使用循环,但是我们可以以另一种方式实现循环,譬如利用构造函数,不断的调用构造函数,函数的执行语句放在构造函数内部,当我们创建n个类的实例,构造函数也就执行了n次。classTemp { public: temp(){++N;S
moses1213
·
2016-04-22 16:00
剑指
offer-
面试题45:圆圈中最后的数字
题目:0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里最后剩下的数字。思路(1):用环形链表模拟圆圈。intLastRemaining(unsignedintn,unsignedintm) { if(nnumbers; for(i=0;i::iteratorit=numbers.begin(); while(numbers.size()>1) {
moses1213
·
2016-04-16 16:00
系统设计面试题
搜索关键词智能提示suggestion百度搜索框中,输入“北京”,搜索框下面会以北京为前缀,展示“北京爱情故事”、“北京公交”、“北京医院”等等搜索词,输入“ 结构之 ”,会提示“结构之法”,“结构之法
算法之道
tianya_team
·
2016-04-14 18:00
剑指
offer-
面试题44:扑克牌的顺子
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。思路:把5张牌看成5个数字的数组,大小王看成0以和其他牌区分。判断是否连续,首选想到对数组排序,如果连续,则相邻的两张牌之间间隔为1,如果间隔大于1,我们可以用0(即大小王)填补空缺,如果0可以补满空缺,则说明5张牌是连续的,反之不连续。另外
moses1213
·
2016-04-14 16:00
剑指
offer-
面试题43:n个骰子的点数
题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s所有可能的值出现的概率。思路:骰子六个点数,所以n个骰子出现的所有可能有6的n次方种。那么这个问题我们专注于求点数和s可能出现的次数,概率相除就可以了。假设点数和为n,那么最后一粒骰子可能出现1,2,3,4,5,6这六种可能,对于倒数第二颗骰子,如果在它之前的所有点数和为n-1,n-2,n-3,n-4,n-5,n-6,那么最
moses1213
·
2016-04-14 11:00
剑指
offer-
面试题42:翻转单词顺序VS左旋转字符串
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“Iamastudent.",则输出"student.aamI"。思路:《编程珠玑》第二章有类似题目,思路就是先翻转每个单词,然后再翻转整体。voidReverse(char*pStart,char*pEnd) { if(pStart==NULL||pEnd==NULL)
moses1213
·
2016-04-13 17:00
算法学习(二)Top K 算法问题
参考学习结构之法,
算法之道
上次谈论了寻找最小的k个数问题,如果反过来就是寻找最大的k个问题了。
shitangdejiaozi
·
2016-04-13 10:00
算法
Hashtable
剑指
offer-
面试题41:和为s的两个数字VS和为s的连续正数序列
题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。例如输入数组{1,2,4,7,11,15}和数字15.由于4+11=15,因此输出4和11。思路:如果固定一个数,再判断其与其他n-1个数的和是不是要求的和,时间复杂度是O(n^2)。很明显不是好的做法,而且注意到数组是已排序的,忽略了这个条件。既然是两个数的和,那么先
moses1213
·
2016-04-12 21:00
剑指
offer-
面试题40:数组中只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。思路:采取异或的办法,两个相同的数异或必然等于0。由于0与任何数异或可以得到本身,我们可以用0异或数组的每一个元素。因为存在两个不同的数,所以异或的结果不等于0。结果的位中至少包含一个1。譬如0010,如果以判断倒数第二位是不是1来判断数组中的元素,则可
moses1213
·
2016-04-12 10:00
剑指
offer-
面试题39:二叉树的深度
题目一:输入一颗二叉树的根结点,求该树的深度。从根结点到叶结点一次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路:如果根结点存在,那么深度至少为1,接下来求左右子树的深度,很明显用递归算法,最后树的深度就是左右子树中深度较大的加上1.intDepthOfBinaryTree(BinaryTreeNode*pRoot) { if(pRoot==NULL) return0;
moses1213
·
2016-04-11 21:00
剑指
offer-
面试题38:数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.思路:排序的数组,最直接的想法就是二分查找。但是数字有重复,如果可以找到数字出现的起始位置和终止位置,那么就可以统计数字出现的次数,因此这个问题转化为用二分查找寻找数字出现的第一个位置和最后一个位置的问题。如果取数组的中位数,它等于要查找的数,那么在它之前
moses1213
·
2016-04-11 19:00
剑指
offer-
面试题37:两个链表中的一个公共结点
题目:输入连个链表,找出它们的第一个公共结点。思路:两个链表,用两个指针这个问题就over了。因为每个结点只有一个m_pNext指针,所以第一个公共结点之后,链表合并成一条线,必然成Y型结构。我们用两个指针从表头开始遍历,但是需要注意的是两个链表的长度可能不一样,为了保持两个指针的同步让指向长一些的链表的指针先走,先走的步数即为两个链表的长度差。然后开始同时移动指针,发现相同的结点即返回结点值。另
moses1213
·
2016-04-11 16:00
剑指
offer-
面试题36:数组中的逆序对
题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中逆序对的个数。例如在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6)、(7,5)、(7,4)、(6,4)和(5,4)。思路:分解这个问题,考虑相邻两个数字构成逆序对的情况。以{7,5,6,4}为例,先分解成{7,5}和{6,4},再分解成长度为1的数组{7},{5},{6}
moses1213
·
2016-04-11 15:00
剑指
offer-
面试题35:第一个只出现一次的字符
题目:在字符串中找出第一个只出现一次的字符。如输入“abaccdeff",则输出'b'。思路:这道题目不难,遍历一遍统计每个字符出现的次数就完了。作者用的是哈希表,因为只需要统计次数,而且字符只有256中,可以用一个大小为256的数组实现。自己用STL里的multimap容器也实现了,道理完全一样。//哈希表实现输出第一个只出现一次的字符 charFirstNotRepeatingChar(cha
moses1213
·
2016-04-09 20:00
剑指
offer-
面试题34:丑数
题目:我们把只包含因子2、3、5的数称作丑数。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第一个丑数。思路:(1)只包含因子2、3、5,那么用2、3、5除以后必定为1,可以作为丑数的判定标准。从1开始递增数字,每个数都判断是不是丑数,直到找到1500个。这种方法有很大的盲目性,每个数都不断的除以2、3、5效率非常低。(2)不去判断一个数
moses1213
·
2016-04-09 17:00
剑指
offer-
面试题33:把数组排成最小的数
题目:输入一个正整数数组,把数组里的所有数字拼接起来排成一个数,打印能拼接出所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.思路:最直接的算法就是全排列,比较每个数的大小,但是全排列有n!种情况,很明显不是一种好的算法。如果有一种排序规则,数组根据这个规则排序之后能排成一个最小的数字,那么我们只要对数组排序就可以了。排序应该满足这样的要求,假
moses1213
·
2016-04-09 16:00
剑指
offer-
面试题37.两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点,链表结点的定义如下:1structListNode 2{ 3intm_nKey; 4ListNode*m_pNext; 5} 一共三种方法解答此题目:方法1:双层遍历链表,复杂度为O(m*n)方法2:有两个栈存储链表结点模拟从后往前遍历方法3:先计算出两个链表长度,然后使得较长的链表先走k步与短链表对齐再一起向后比较 这里我们只介绍方法三我们以链表:1
u013018721
·
2016-04-08 13:00
剑指offer
剑指
offer-
面试题32.从1到n整数中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字中1,10,11和12,1一共出现了5次 本题可以直接变量1到n的n个数然后分别计算每个数中1的个数,然而这种方法是效率很低下的书上给出了一共方法,去找数n各个位置上出现1的规律,在这里我就不再描述具体的规律推倒过程,只是给出这样一个普遍性的规律。 1.对每一位上面的数字,当该数字
u013018721
·
2016-04-08 13:00
剑指offer
剑指
offer-
面试题31.连续子数组的最大和
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或者连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度O(n) 本题可以把所有子数组全部找出来再求其和的最大值便可以得出,但是这样会导致算法的时间复杂度为0(n^2),所以有两种方法来解决这个问题。方法1.数组扫描我们扫描一遍数组并且累加数组元素的和,当遇到累加和为负数的时候,我们从数组中下一个元素开始重新累加。直到遍历完成
u013018721
·
2016-04-08 13:00
剑指offer
剑指
offer-
面试题30.最小的k个数
题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8 这8个数字,则最小的四个数字为1,2,3,4, 这道题是典型的TopK问题,剑指Offer提供了两种方法来实现,一种方法是parition方法,一种方法是建立一个大小为k的堆进行topk求解 这里我们只解释第一种方法:1.首先随机查找数组中一个元素作为一个基准,然后parition一次使得数组左边的元素小于基本,数组
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题29.数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出整个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在整个数组中出现5次,超过数组长度的一半,输出2. 此题的解法有很多种,剑指offer书中提出了两种,一种是Parition的方法,另外一种是计数的方法。 这里我们用计数的方法来实现一下。试想当我们遍历数组的时候用一个计数器。当遇到相同的数时计数器加1,遇
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题28.字符串的排列
题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 此题的主要步骤由如下几步:1.求出所有可能出现在第一个位置的字符2.将第一个字符与后面字符分别交换3.将第一个字符后面的字符递归步骤1,2 代码如下:1#include 2usingnamespacestd; 3 4voidF
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题27.二叉搜索树与双向链表
题目:输入一颗二叉搜索树,将该二叉搜索树转换为一个排序的双向链表。要求不能创建任何新的结点,只能调整树种结点指针的指向。比如输入下图的二叉搜索树,则输出转换后的双向排序链表。110 2/\ 3614 4/\/\ 5481216转换后的双向排序链表为:146810121416首先要明白二叉搜索树是根结点大于左子结点,小于右子结点 然而要让转换后的双向链表基本有序,则应该中序遍历该二叉树 遍历的时候将
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题26.复杂链表的复制
题目:请实现函数ComplexListNode*Clone(ComplexListNode*pHead),复制一个复杂链表,在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如下:1structComplexListNode 2{ 3intm_nValue; 4ComplexListNode*m_pNe
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题25.二叉树中和为某一值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中借点值得和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二叉树结点定义:1structBinaryTreeNode 2{ 3intm_nValue; 4BinaryTreeNode*m_pLeft; 5BinaryTreeNode*m_pRight; 6} 我们以二叉树:18 2/\ 4610 6/\/\ 857911
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题24.二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序,如果是,则返回true,如果不是则返回false,假定输入的数组中任意两个数都不相等。 此题目我们以5,7,6,9,11,10,8为例解题步骤如下:1.先找到序列的最后一个元素82.按照顺序从序列的从前往后遍历,知道遇到第一个大于8的数即9,3.那么元素9以前为左子树,全部小于跟节点,9以后为右子树, 应该全部大于跟节点,可验证9,11
u013018721
·
2016-04-08 12:00
剑指offer
剑指
offer-
面试题32:从1到n整数中1出现的次数
题目:输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中1包含1的数字有1,10,11,和12,1一共出现了5次。思路:(1)遍历解法,从1到n遍历每一个数,每个数判断1的个数,判断1的个数采取不断模10取余的方法,对于数字n,它有logn位,那么时间复杂度为O(nlogn),当n很大时,需要大量的计算,运算效率不高。 (2)如果我们能统计每个位上出现
moses1213
·
2016-04-08 10:00
剑指
offer-
面试题23.从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入的二叉树,则依次打印出8、6、10、5、7、9、11二叉树结点的定义如下:1structBinaryTreeNode 2{ 3intm_nValue; 4BinaryTreeNode*m_pLeft; 5BinaryTreeNode*m_pRight; 6};我们以如下二叉树为例:18 2/\ 3610 4/\/\
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题22.栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1是该压栈序列对应的一个弹出序列,但4、3、5、1、2就不可能是该该压栈序列的弹出序列。 这种判断其实只要掌握栈的先进后出原则,则不难解决。本题的题解步骤如下:1.设置一个辅助栈S,用于模拟出栈入栈顺序,设入栈顺序
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题21.包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min,push及pop的时间复杂度都是O(1). 这一题实际上需要一个辅助栈存储最小值:1.在模板类定义两个栈类型私有成员变量,一个为保存数据的栈另外一个为保存最小值的栈2.当栈为空的时候直接将数据同时压入数据栈和最小值栈3.当栈不为空的时候,将数据先压入数据栈同时比较该数据和最小值栈栈顶元素的大小 若大
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题20.顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:输入一个矩阵如下:11234 25678 39101112 413141516 则依次打印出数字:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10这道题的类似于:http://www.cnblogs.com/vpoet/p/4660520.html(LeeCode-SpiralMatrix11)其
u013018721
·
2016-04-07 20:00
剑指offer
剑指
offer-
面试题19.二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 二叉树节点定义如下:1strcutBinaryTreeNode 2{ 3intval; 4strcutBinaryTreeNode*m_pleft; 5strcutBinaryTreeNode*m_pright; 6} 本题可以参考http://www.cnblogs.com/vpoet/p/4660486.html(Leecode-In
u013018721
·
2016-04-07 20:00
剑指offer
上一页
17
18
19
20
21
22
23
24
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他