剑指Offer
@SmartSi
Stay Hungry, Stay Foolish
展开
-
[华为机试练习题]55.最大公约数 & 多个数的最大公约数
题目描述: 输入2个数字,最后输出2个数字的最大公约数题目类别: 位运算 难度: 初级 运行时间限制: 无限制内存限制: 无限制阶段: 入职前练习 输入: 2个整数输出: 输出数字1和2的最大公约数样例输入: 2 3样例输出: 1代码/*---------------------------------------* 日期:2015-07-原创 2015-07-05 15:47:11 · 2747 阅读 · 0 评论 -
[华为机试练习题]57.对象管理器
题目代码/*---------------------------------------* 日期:2015-07-05* 作者:SJF0115* 题目:对象管理器* 来源:华为机试练习题-----------------------------------------*/#include <iostream>#include "ObjMgt.h"#include <原创 2015-07-05 20:03:05 · 1965 阅读 · 0 评论 -
[华为机试练习题]58.查找同构数的数量
题目描述: 找出1至n之间同构数的个数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。详细描述:接口说明 原型:intSearchSameConstructNum(int n);输入参数:int n:查找1至n之间的全部同构数返回值:int:1至n之间同构数的个数练习阶段: 初级 代码/*------------原创 2015-07-05 20:37:57 · 2829 阅读 · 1 评论 -
[华为机试练习题]60.水仙花数
题目描述: 水仙花数又称阿姆斯特朗数。水仙花数是指一个n 位数( n≥3 ),它的每个位上的数字的n 次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)求输入的数字是否为水仙花数练习阶段: 初级 代码/*---------------------------------------* 日期:2015-07-05* 作者:SJF0115*原创 2015-07-05 22:24:05 · 3171 阅读 · 0 评论 -
[华为机试练习题]61.找出字符串中第一个出现次数最多的字符
题目描述: 找出字符串中第一个出现次数最多的字符详细描述:接口说明 原型:bool FindChar(char* pInputString, char* pChar);输入参数:char* pInputString:字符串输出参数(指针指向的内存区域保证有效):char* pChar:出现次数最多的字符返回值: false 异常失败 true 输出成功练习阶段:原创 2015-07-05 22:26:59 · 2894 阅读 · 0 评论 -
[华为机试真题][2014]62.去除重复字符并排序
题目描述:去除重复字符并排序运行时间限制:无限制内容限制: 无限制输入: 字符串输出:去除重复字符并排序的字符串样例输入:aabcdefff样例输出:abcdef代码/*---------------------------------------* 日期:2015-07-05* 作者:SJF0115* 题目:去除重复字符并排序原创 2015-07-05 22:47:47 · 2216 阅读 · 0 评论 -
[华为机试练习题]59.奖金提成
题目描述: 简要描述:企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;利润高于100000元,低于200000元(100000≤200000)时;低于100000元的部分按10%提成;高于100000元的部分,可提成7.5%;200000≤400000时,低于200000元部分仍按上述办法提成,(下同);高于200000元的部分按5%提成;40000原创 2015-07-05 21:16:10 · 2233 阅读 · 0 评论 -
[华为机试真题][2014]63.等式变换
题目输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 = 5请编写程序,统计满足输入整数的所有整数个数。输入: 正整数,等式右边的数字输出: 使该等式成立的个数样例输入:5样例输出:21代码/*--------------------原创 2015-07-06 14:46:14 · 2316 阅读 · 0 评论 -
[华为机试真题][2015]65.和尚挑水
题目 某寺庙里7个和尚:轮流挑水,为了和其他任务不能冲突,各人将有空天数列出如下表:和尚1: 星期二,四;和尚2: 星期一,六;和尚3: 星期三,日;和尚4: 星期五;和尚5: 星期一,四,六;和尚6: 星期二,五;和尚7: 星期三,六,日;请将所有合理的挑水时间安排表 思路 回朔法求解回朔法即每进行一步,都试图在当前部分解的基础上扩大该部分解。扩大时,首先检查扩大后是否违反了约原创 2015-07-06 20:52:41 · 3283 阅读 · 1 评论 -
[华为机试真题]67.奇偶数入座
题目代码/*---------------------------------------* 日期:2015-07-07* 作者:SJF0115* 题目:奇偶数入座* 来源:华为机试真题-----------------------------------------*/#include <iostream>#include <string>#include <vec原创 2015-07-07 09:12:13 · 1986 阅读 · 0 评论 -
[华为机试真题]70.分苹果
题目M个相同苹果放到N个相同篮子里有多少种放法,允许有篮子不放。1<=M<=10,1<=N<=10例如5个苹果三个篮子,3,1,1 和 1,1,3是同一种放法输入 7 3输出 8思路设f(m,n) 为m个苹果,n个盘子的放法数目:当n>m:必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即if(n>m) f(m,n) = f(m,m) 当n<=m:不同的放法可以分成两类:原创 2015-07-07 11:32:19 · 7991 阅读 · 2 评论 -
[华为机试真题][2014]64.实现两个合法时间相加
题目描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果;注意,相加后的结果也必需是一个合法的时间;附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间;运行时间限制: 无限制内存限制: 无限制输入: 时分秒格式的时间字符串,如00:00:00输出: 时分秒格式的时间字符串,如0原创 2015-07-06 15:28:35 · 2073 阅读 · 1 评论 -
[华为机试真题]69.姓名的夫妻相
题目在中国,形容夫妻恩爱的词汇中,大家用的比较多的就是“夫妻相”。所谓“夫妻相”,就是两个人看上去比较般配,长相、身材等某些方面有一定的相似度。本题则另辟蹊径,从人的姓名维度,以字母重复个数来寻找最具“夫妻相”的人。题目中预先给定一组女士的姓名拼音。输入男士的姓名拼音(拼音中间可以有空格,字母全部小写),依预先给定姓名拼音的先后遍历所有姓名,输出字母重复数最多的女士姓名。规则1:如果字母重复数最原创 2015-07-07 10:52:48 · 2996 阅读 · 0 评论 -
[华为机试练习题]35.找零钱
题目描述: 我们知道人民币有1、2、5、10、20、50、100这几种面值。现在给你n(1≤n≤250)元,让你计算换成用上面这些面额表示且总数不超过100张,共有几种。比如4元,能用4张1元、2张1元和1张2元、2张2元,三种表示方法。题目类别: 循环 难度: 初级 运行时间限制: 10Sec 内存限制: 128MByte 阶段: 入职前练习 输入: 输入有多组,每组一原创 2015-07-02 10:57:08 · 3190 阅读 · 0 评论 -
[华为机试真题]66.单词搜索
题目代码/*---------------------------------------* 日期:2015-07-06* 作者:SJF0115* 题目:WordSearch* 来源:华为机试真题-----------------------------------------*/#include <iostream>#include <string>#include原创 2015-07-06 21:54:28 · 2095 阅读 · 0 评论 -
[华为机试真题]68.简单四则运算
题目输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值注:3.1、表达式只含 +, -, *, / 四则运算符,不含括号3.2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况3.3、要考虑加减乘除按通常四则运算规定的计算优先级3.4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生3.5、输入字符串一定是符原创 2015-07-07 09:46:40 · 3694 阅读 · 0 评论 -
[华为机试练习题]71.一元多项式化简
题目背景:编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。说明: 多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。单项式指数字与字母幂的乘积构成的代数式。对一元多项式,字母只有一种。同类项合并指将多项式中指数相同的单项式,系数经过加减求和,合并为一个单项式。按指数降序指多项式中,单项式按指数从大到小顺序相连。格式说明一元多项式输入原创 2015-07-07 16:48:23 · 6389 阅读 · 0 评论 -
[程序员面试金典]1002.下一个较大元素
题目描述现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。 给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。 测试样例: [11,13,10,5,12,21,3],7 返回:[13,21,12,12,21,-1,-1]思路从后向前维护一个递减栈。 最右边的那个值肯定没有最大值,所以肯定原创 2015-08-11 22:29:41 · 1635 阅读 · 0 评论 -
[剑指Offer]1.跳台阶
题目描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1输出:对应每个测试案例,输出该青蛙跳上一个n级的台阶总共有多少种跳法。样例输入:5样例输出:8/**************************原创 2013-11-05 09:58:47 · 1889 阅读 · 0 评论 -
[程序员面试金典]1001.字符串变换
题目描述现有一个字典,同时给定字典中的两个字符串s和t,给定一个变换,每次可以改变字符串中的任意一个字符,请设计一个算法,计算由s变换到t所需的最少步数,同时需要满足在变换过程中的每个串都是字典中的串。 给定一个string数组dic,同时给定数组大小n,串s和串t,请返回由s到t变换所需的最少步数。若无法变换到t则返回-1。保证字符串长度均小于等于10,且字典中字符串数量小于等于500。 测试原创 2015-08-11 22:34:12 · 1782 阅读 · 0 评论 -
[剑指Offer]2.变态跳台阶
题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路用Fib(n)表示青蛙跳上n阶台阶的跳法数,设定Fib(0) = 1;当n = 1 时, 只有一种跳法,即1阶跳,即Fib(1) = 1;当n = 2 时, 有两种跳的方式,一阶跳和二阶跳,即Fib(2) = Fib(1) + Fib(0) = 2;当n = 3 时,有三种跳的方式,原创 2015-07-19 15:19:41 · 1420 阅读 · 0 评论 -
[剑指Offer]3.矩形覆盖
题目描述:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1输出:对应每个测试案例,输出用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有的方法数。样例输入:4样例输出:5原创 2013-11-05 10:11:03 · 2637 阅读 · 0 评论 -
[剑指Offer]6.替换空格
题目请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。思路我们首先想到的就是从前往后扫描,如果空格,就替换为%20,但是这样需要移动空格后的元素。我们还有一种方法,首先遍历一遍字符串,统计出空格的个数,并可以由此计算出替换之后的字符串的长度。每替换一个空格,长度增加2,因此替换之后的字符串长度等原创 2015-07-19 22:34:58 · 1271 阅读 · 0 评论 -
[LeetCode]239.Sliding Window Maximum
题目Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window原创 2015-07-19 15:49:54 · 2419 阅读 · 0 评论 -
[剑指Offer]5.二维数组中的查找
题目在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。原创 2015-07-19 18:09:32 · 1584 阅读 · 0 评论 -
[剑指Offer]11.斐波那契数列
题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。斐波那契数列的定义如下:输入:输入可能包含多个测试样例,对于每个测试案例,输入包括一个整数n(1输出:对应每个测试案例,输出第n项斐波那契数列的值。样例输入:3样例输出:2/***************************原创 2013-11-05 09:35:19 · 2177 阅读 · 0 评论 -
[剑指offer]8.重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。原创 2015-07-20 11:35:10 · 1477 阅读 · 0 评论 -
[剑指Offer]10.旋转数组的最小数字
题目1386:旋转数组的最小数字题目描述:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。输入:输入可能包含多原创 2013-11-04 22:24:05 · 2238 阅读 · 0 评论 -
[剑指Offer]12.二进制中1的个数
题目输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路把一个整数减去1,再和原整数做与运算,会把整数最右边一个1变成0.那么一个整数的二进制表示中有多少个1,就可以进行多次这样的操作。原创 2015-07-20 21:47:11 · 3284 阅读 · 0 评论 -
[华为机试练习题]13.火车进站
题目描述: 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号。要求以字典序排序输出火车出站的序列号。题目类别: 栈 难度: 高级 运行时间限制: 10Sec内存限制: 128MByte阶段: 入职前练习 输入: 有多组测试用例,每一组第一行输入一个正整数N(0<N<10),第二行包括N个正整数,范围为1原创 2015-06-30 09:10:39 · 6039 阅读 · 4 评论 -
[剑指Offer]9.用两个栈实现队列
题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路用栈来模拟队列。我们首先插入一个元素a到stack1中,再压入两个元素bc,此时栈中有元素abc,其中c位于栈顶,而stack2仍然为空。我们试着删除一个元素。按照队列先进先出的原则,我们应该先删除元素a。元素a存放在stack1中且不在栈顶,因此不能直接删除。注意到stack2还未使用,我们把stack1中原创 2015-07-20 16:00:04 · 1647 阅读 · 0 评论 -
[剑指Offer]7.从尾到头打印链表
九度OJ 题目1511:从尾到头打印链表原创 2013-10-18 21:50:22 · 3774 阅读 · 0 评论 -
[程序员面试题精选100题]50.树的子结构
题目输入两棵二叉树A和B,判断树B是不是A的子结构。例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一样的,因此B就是A的子结构。思路这是2010年微软校园招聘时的一道题目。二叉树一直是微软面试题中经常出现的数据结构。对微软有兴趣的读者一定要重点关注二叉树。回到这个题目的本身。要查找树A中是否存在和树B结构一样的子树,我们可以分为两步: (1)树A中找到和B的根结点的值一样的结点N原创 2015-03-26 15:23:35 · 1253 阅读 · 0 评论 -
[程序员面试题精选100题]19.反转链表
输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。分析 假设经过若干操作,我们已经把结点 pre之前的指针调整完毕,这些结点的next指针都指向前面一个结点。现在我们遍历到结点cur。我们需要把调整结点的next指针让它指向前一个结点pre。注意一旦调整了指针的指向,链表就断开了,如下图所示: 因为已经没有指针指向结点nextNode,我们没有办法再遍历到结点nextNode原创 2015-02-11 18:55:14 · 1394 阅读 · 0 评论 -
[程序员面试题精选100 题]17.把字符串转换成整数
题目输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串”345”,则输出整数345。 分析这道题尽管不是很难,学过 C/C++语言一般都能实现基本功能,但不同程序员就这道题写出的代码有很大区别,可以说这道题能够很好地反应出程序员的思维和编程习惯,因此已经被包括微软在内的多家公司用作面试题。建议读者在往下看之前自己先编写代码,再比较自己写的代码和下面的参考代码有哪些不同。 我们需要原创 2015-02-11 12:06:40 · 1390 阅读 · 0 评论 -
[程序员面试题精选100题]9.链表中倒数第k个结点
输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。原创 2015-02-08 17:19:52 · 1189 阅读 · 0 评论 -
[程序员面试题精选100题]12.从上往下遍历二叉树
【题目】输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。例如输入 8 / \ 6 10 / \ / \ 5 7 9 11输出8 6 10 5 7 9 11【分析】这曾是微软的一道面试题。这道题实质上是要求遍历一棵原创 2014-12-23 19:17:56 · 1380 阅读 · 0 评论 -
[程序员面试题精选100题]11.求二叉查找树的镜像
【题目】输入一颗二叉查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。例如输入: 8 / \ 6 10 / \ / \ 5 7 9 11输出: 8 / \ 10原创 2014-12-22 11:07:41 · 1581 阅读 · 0 评论 -
[程序员面试题精选100题]10.排序数组中和为给定值的两个数字
剑指Offer之和为S的两个数字剑指Offer之和为S的连续正数序列扩展(1):输入一个数组,判断这个数组中是不是存在三个数字i, j, k,满足i+j+k等于0。扩展(2):如果输入的数组是没有排序的,但知道里面数字的范围,其他条件不变,如何在O(n)时间里找到这两个数字?这个的基本思路是先用哈希表实现O(n)的排序(请参照本面试题系列的第57题),接下来原创 2014-12-22 09:54:16 · 1342 阅读 · 0 评论 -
[程序员面试题精选100题]6.二叉查找树的后序遍历结果
【题目】输入一个整数数组,判断该数组是不是某二叉查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果: 8 / \ 6 10 / \ / \ 5 7 9 11因此返回true。原创 2014-12-20 16:19:47 · 1212 阅读 · 0 评论