
剑指offer
MereX
这个作者很懒,什么都没留下…
展开
-
剑指offer:面试题47——不用加减乘除做加法
剑指offer:面试题47——不用加减乘除做加法题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:class Solution {public: int Add(int num1, int num2) { int sum; //放和 int carry; //放进位 do ...原创 2019-05-07 16:54:49 · 191 阅读 · 0 评论 -
剑指offer:面试题54——表示数值的字符串
剑指offer:面试题54——表示数值的字符串题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。思路:表示数值的字符的正则遵循如下模式:【符号】整数数值【.【小数数值】】【e或者E【符号】整...原创 2019-05-08 16:09:22 · 234 阅读 · 0 评论 -
剑指offer:面试题42——左旋字符串
剑指offer:面试题42——左旋字符串题目:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!思路:先整个翻转字符串,然后翻转后n个字符串,最后将剩余字符...原创 2019-05-05 22:20:23 · 319 阅读 · 0 评论 -
剑指offer:面试题42——翻转单词顺序列
剑指offer:面试题42——翻转单词顺序列题目:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行...原创 2019-05-05 21:57:43 · 288 阅读 · 0 评论 -
剑指offer:面试题41——和为s的连续正数序列
剑指offer:面试题41——和为s的连续正数序列题目:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luc...原创 2019-05-05 19:50:11 · 361 阅读 · 0 评论 -
剑指offer:面试题53——正则表达式匹配
剑指offer:面试题53——正则表达式匹配题目:请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配思路:匹配函数可以递归重复调用,因此可以避免了双层循环。...原创 2019-05-08 14:42:53 · 193 阅读 · 0 评论 -
面试题25:二叉树中和为某一值的路径
面试题25:二叉树中和为某一值的路径题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:路径的模拟类似堆栈,这里采用数组vector存储,push_back,pop_back模拟堆栈,为了方便读取除了栈顶以外的其他元素。由于先访问根...原创 2019-04-30 10:47:54 · 189 阅读 · 0 评论 -
剑指offer:面试题52——构建乘积数组
剑指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]。不能使用除法。思路见注释:class Solution {public: vector<int> multiply(const vector<int>...原创 2019-05-08 10:42:48 · 289 阅读 · 0 评论 -
剑指offer:面试题24——二叉搜索树的后续遍历序列
剑指offer:面试题24——二叉搜索树的后续遍历序列题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:当前数组的最后一位是后续遍历的根,其他小于根的数字是左子树,大于根的数字是右子树。因此可以设计,遍历数组直到遇到大于根的值,记录他的长度,继续遍历后面的数组,如果都大于根则有可能是右子树,调用...原创 2019-04-29 22:16:00 · 204 阅读 · 0 评论 -
剑指offer:面试题6——旋转数组的最小数字
剑指offer:面试题6——旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。class Solution {public: int m...原创 2019-04-20 16:16:34 · 289 阅读 · 0 评论 -
剑指offer:面试题16——反转链表
剑指offer:面试题16——反转链表题目:输入一个链表,反转链表后,输出新链表的表头。思路:第一种:借助栈第二种:为了防止链表断裂,将当前节点、当前节点的前一个和后一个节点都保存下来/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};...原创 2019-04-24 22:04:30 · 249 阅读 · 0 评论 -
剑指offer:面试题17——合并两个排序链表
剑指offer:面试题17——合并两个排序链表题目:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路:直接合并O(n)——如下或者使用递归合并O(logn)——书114页/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), ne...原创 2019-04-25 16:10:19 · 232 阅读 · 0 评论 -
剑指offer:面试题27——二叉搜索树与双向链表
剑指offer:面试题27——二叉搜索树与双向链表题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)/*struct RandomListNode { int label; struct RandomList...原创 2019-04-30 15:32:25 · 209 阅读 · 0 评论 -
剑指offer:面试题46——求1+2+3+…+n
剑指offer:面试题46——求1+2+3+…+n题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路:方法一:使用构造函数求解,注意的点在注释中给出class Cal //如果Cal嵌套在Solution内,则 int Cal::num=0; //i...原创 2019-05-07 16:52:56 · 246 阅读 · 0 评论 -
剑指offer:面试题45——圆圈中最后剩下的数字
剑指offer:面试题45——(孩子们的游戏)圆圈中最后剩下的数字题目:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他...原创 2019-05-07 14:51:02 · 260 阅读 · 0 评论 -
剑指offer:面试题44——扑克牌中的顺子
剑指offer:面试题44——扑克牌中的顺子题目:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1...原创 2019-05-07 10:35:59 · 257 阅读 · 0 评论 -
剑指offer:面试题61——按之字形顺序打印二叉树
剑指offer:面试题61——按之字形顺序打印二叉树题目:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; ...原创 2019-05-09 16:22:05 · 266 阅读 · 0 评论 -
剑指offer:面试题60——把二叉树打印成多行
剑指offer:面试题60——把二叉树打印成多行题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。思路:二叉树的层序遍历,每次放入一个节点的左右孩子时,当前层数拥有节点数nextLevel++,每次pop一个节点,则待打印节点数toBepop–。当该层的toBepop减为0时说明本层打印结束,则应该打印回车,并且将下一层应该打印的节点值更新。/*struct TreeN...原创 2019-05-09 13:41:53 · 232 阅读 · 0 评论 -
剑指offer:面试题59——对称的二叉树
剑指offer:面试题59——对称的二叉树题目:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2019-05-09 10:51:13 · 304 阅读 · 0 评论 -
剑指offer:面试题58——二叉树的下一个节点
剑指offer:面试题58——二叉树的下一个节点题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; ...原创 2019-05-09 10:11:57 · 273 阅读 · 0 评论 -
剑指offer:面试题57——删除链表中重复的结点
剑指offer:面试题57——删除链表中重复的结点题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:由于重复的结点和其本身都要被删除,所以需要保留重复结点的前一个结点。且原有的头结点也有可能被删掉,因此要注意判断...原创 2019-05-09 09:13:34 · 185 阅读 · 0 评论 -
剑指offer:面试题56——链表中环的入口节点
剑指offer:面试题56——链表中环的入口节点题目:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solu...原创 2019-05-08 20:53:33 · 254 阅读 · 0 评论 -
剑指offer:面试题55——字符流中第一个不重复的字符
剑指offer:面试题55——字符流中第一个不重复的字符题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路:利用哈希表进行计算,哈希表所有初值赋为-1,如果当前出现了这个数,则记录它在串中出现的位置,如果这个数字是第二次以上...原创 2019-05-08 19:43:25 · 294 阅读 · 0 评论 -
剑指offer:面试题40——数组中只出现一次的数字
剑指offer:面试题40——数组中只出现一次的数字题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。class Solution {public: bool IsBit1(int num,unsigned int indexBit) { //判断数在二进制表示中...原创 2019-05-05 11:06:35 · 396 阅读 · 0 评论 -
剑指offer:面试题23——从上往下打印二叉树
剑指offer:面试题23——从上往下打印二叉树题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:用一个队列每次存储当前的根节点,然后将它弹出,将它的左右孩子入队,直到队列为空需要注意的点:数组和队列push_back,存入队尾,pop_front()从队列头取出,前面要求有错误判断,且错误判断的位置要放在数组声明的后面,否则会报错/*struct TreeNode {...原创 2019-04-29 15:46:24 · 235 阅读 · 0 评论 -
剑指offer:面试题15——链表中倒数第k个结点
剑指offer:面试题15——链表中倒数第k个结点题目:输入一个链表,输出该链表中倒数第k个结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Find...原创 2019-04-24 20:19:54 · 213 阅读 · 0 评论 -
剑指offer:面试题11——数值的整数次方
剑指offer:面试题11——数值的整数次方题目:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。思路一:for循环计算出数的整数次方,注意一下几点:1)0的负数次方出错,返回值0,需要定义一个全局变量表示出错状态2)0的正整数次幂为03)<u>在比较base值是否为0或1的时候不能直接base== 1或base=...原创 2019-04-21 17:28:50 · 216 阅读 · 0 评论 -
剑指offer:面试题9.3——矩形覆盖问题
剑指offer:面试题9.3——矩形覆盖问题题目:我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?class Solution {public: int rectCover(int number) { //设覆盖2*n有f(n)种方法。当覆盖最左侧矩形时,有两种方法,一种横着一种竖着 ...原创 2019-04-21 13:53:03 · 267 阅读 · 0 评论 -
剑指offer:面试题10——变态跳台阶
剑指offer:面试题10——变态跳台阶题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。思路:除了最后一个台阶必须跳,其他每个台阶有跳或不跳两种选法,所以共有2^(n-1)种方法class Solution {public: int jumpFloorII(int number) { int su...原创 2019-04-20 19:44:07 · 306 阅读 · 0 评论 -
剑指offer:面试题9——跳台阶
剑指offer:面试题9——跳台阶题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。class Solution {public: int jumpFloor(int number) { //台阶数为n,设跳法为f(n)种,若n=1,有一种跳法 // 若n=2,有两...原创 2019-04-20 19:41:39 · 298 阅读 · 0 评论 -
剑指offer:面试题7——斐波那契数列
剑指offer:面试题7——斐波那契数列题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39//不用递归,利用递推公式做节省时间//f0=0//f1=1;//fn=fn-1 +fn-2;class Solution {public: int Fibonacci(int n) { int ...原创 2019-04-20 17:21:49 · 246 阅读 · 0 评论 -
剑指offer:面试题5——从尾到头打印链表
剑指offer:面试题5——从尾到头打印链表题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList思路是,从尾到头的时候,如果直接遍历需要循环遍历O(n!),每次都从头遍历,或者改变链表结构,编程双向链表,O(n),如果借助一个栈,则可以大大提高效率。从头到尾遍历一次链表并将元素入栈,则出栈时候值自然是倒序了。/*** struct ListNode {* ...原创 2019-04-12 20:34:59 · 272 阅读 · 0 评论 -
剑指offer——面试题2实现Singleton模式
剑指offer——面试题2实现Singleton模式 题目:设计一个类,我们只能生成该类的一个实例单例模式一种设计模式,设计一个类,保证这个类只有一个对象实例应用场合:如windows中只能有一个任务管理器,同时间内一个系统只能有一个计时工具要点:一、某个类只能由一个实例 (只提供私有构造函数)二、必须自行创建这个实例 (类定义中含有一个该类的静态私有对象)...原创 2019-04-09 10:49:06 · 160 阅读 · 0 评论 -
剑指offer: 面试1——赋值运算符函数
剑指offer: 面试1——赋值运算符函数题目:如下为类型为CMyString的声明,请为该类型添加赋值运算符函数class CMyString{pubilc:CMyString(char * pData = NULL);CMyString(const CMyString &str);~CMyString(void);private:char * m_pData;};...原创 2019-04-08 20:17:02 · 190 阅读 · 0 评论 -
剑指offer:面试4——替换空格
剑指offer:面试4——替换空格题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { //if(str== NULL || le...原创 2019-04-10 21:58:46 · 287 阅读 · 0 评论 -
剑指offer: 面试7——用两个栈实现队列
剑指offer: 面试7——用两个栈实现队列题目:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:栈1用来存放队列顺序的逆序,因此如果栈1不空2空则直接添加即可,输出时候倒过来自然是正常队列顺序,如果栈2不空,说明栈2中存的数可能是队列的正序,因此需要先借助栈1将顺序调成逆序再添加,且在此之前的栈1如果为空要顺带释放,防止内存泄漏。添加时,分为几种...原创 2019-04-18 16:50:22 · 187 阅读 · 0 评论 -
剑指offer:面试题18——树的子结构
剑指offer:面试题18——树的子结构题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NU...原创 2019-04-28 09:30:56 · 298 阅读 · 0 评论 -
剑指offer:面试题14——调整数组顺序使奇数位于偶数前面
剑指offer:面试题14——调整数组顺序使奇数位于偶数前面题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:由于不改变相对顺序,可以额外申请空间先存奇数再存偶数O(n)如果不允许额外申请空间,则可以每次找到偶数都将偶数取出来,并且将当前位置之后的数都向前移动一位...原创 2019-04-24 17:50:48 · 279 阅读 · 0 评论 -
剑指offer:面试题38——数字在排序数组中出现的次数
剑指offer:面试题38——数字在排序数组中出现的次数题目:统计一个数字在排序数组中出现的次数。思路:如{1,2,3,3,3,3,4,5}可以采用二分法,分别找到对应的数字的开头第一个和最后一个class Solution {public:int GetNumberFirst(vector<int> data,int begin,int end,int k){ ...原创 2019-05-04 20:34:29 · 238 阅读 · 0 评论 -
剑指offer:面试题37——两个链表的第一个公共节点
剑指offer:面试题37——两个链表的第一个公共节点题目:输入两个链表,找出它们的第一个公共结点思路:两个链表有公共节点,且都是单向链表,这意味着,从公共节点之后,两者节点都是相同的(即为Y型),因此两个链表指向的节点地址和值应该相同,但由于连个链表指针不同,因此判断时候如果借助栈,不能用指针判断,但是可以用top1==top2进行判断。另一种方法是,分别遍历两个链表求出它们的长度差值,先...原创 2019-05-04 16:33:00 · 349 阅读 · 0 评论