剑指 offer
wchzh2015
这个作者很懒,什么都没留下…
展开
-
剑指offer-面试题 34:二叉树中和为某一值的路径
题目描述:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。样例给出二叉树如下所示,并给出num=22。 5 / \ 4 6 / / \ 12 13 6 / \ / \9 1 5 1输出:[[5,4,12,1],[5,6...原创 2019-08-11 21:47:44 · 119 阅读 · 0 评论 -
二叉搜索树的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。样例输入:[4, 8, 6, 12, 16, 14, 10]输出:trueclass Solution {public: bool verifySequenceOfBST(vector<int&g...原创 2019-05-07 00:06:27 · 98 阅读 · 0 评论 -
剑指offer-面试题 9:用两个栈实现队列
题目描述:请用栈实现一个队列,支持如下四种操作:push(x) – 将元素x插到队尾; pop() – 将队首的元素弹出,并返回该元素; peek() – 返回队首元素; empty() – 返回队列是否为空;注意:你只能使用栈的标准操作:push to top,peek/pop from top,size和is empty; 如果你选择的编程语言没有栈的标准库...原创 2019-05-06 22:36:21 · 154 阅读 · 0 评论 -
剑指offer-面试题 26:树的子结构
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。我们规定空树不是任何树的子结构。样例树A: 8 / \ 8 7 / \ 9 2 / \ 4 7树B: 8 / \ 9 2返回true,因为B是A的子结构。算法:/** * Definition for a bina...原创 2019-05-08 17:02:28 · 121 阅读 · 0 评论 -
剑指offer-面试题 30:包含min函数的栈
题目描述:设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。push(x)–将元素x插入栈中 pop()–移除栈顶元素 top()–得到栈顶元素 getMin()–得到栈中最小元素样例MinStack minStack = new MinStack();minStack.push(-1);minStack.push(3);mi...原创 2019-05-08 15:55:39 · 152 阅读 · 0 评论 -
剑指offer-面试题 32-1: 不分行从上往下打印二叉树
题目描述:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。样例输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 2 / 6 / 4输出:[8, 12, 2, 6, 4]算法:/** * Definitio...原创 2019-05-05 21:34:22 · 146 阅读 · 0 评论 -
剑指offer-面试题 32-2: 之字形打印二叉树
题目描述:请实现一个函数按照之字形顺序从上向下打印二叉树。即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。样例输入如下图所示二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null] 8 / \ 12 2 / \ 6 4...原创 2019-05-05 21:30:10 · 123 阅读 · 0 评论 -
剑指offer-面试题 32-2: 分行从上往下打印二叉树
题目描述:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。样例输入如下图所示二叉树[8, 12, 2, null, null, 6, null, 4, null, null, null] 8 / \ 12 2 / 6 / 4输出:[[8], [12, 2], [6], [4]]算法:使用两...原创 2019-05-05 21:28:00 · 151 阅读 · 0 评论 -
剑指offer-面试题 32:栈的压入、弹出序列
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则视为是一个栈的压入...原创 2019-05-05 20:28:54 · 115 阅读 · 0 评论 -
剑指offer-面试题 27:二叉树的镜像
题目描述输入一个二叉树,将它变换为它的镜像。样例输入树: 8 / \ 6 10 / \ / \ 5 7 9 11 [8,6,10,5,7,9,11,null,null,null,null,null,null,null,null] 输出树: 8 / \ 10 6 / \ / \ 11 9 ...原创 2019-05-08 14:57:57 · 131 阅读 · 0 评论 -
构建乘积数组
题目描述给定一个数组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]。不能使用除法。样例输入:[1, 2, 3, 4, 5]输出:[120, 60, 40, 30, 24]思考题:能不能只使用常数空间?(除了输出的数组之外)算法:...原创 2019-05-05 16:58:28 · 93 阅读 · 0 评论 -
把字符串转换成整数
题目描述:请你写一个函数StrToInt,实现把字符串转换成整数这个功能。当然,不能使用atoi或者其他类似的库函数。样例输入:"123"输出:123注意:你的函数应满足下列条件:忽略所有行首空格,找到第一个非空格字符,可以是 ‘+/−’ 表示是正数或者负数,紧随其后找到最长的一串连续数字,将其解析成一个整数; 整数后可能有任意非数字字符,请将其忽略;...原创 2019-05-05 16:17:46 · 191 阅读 · 0 评论 -
剑指offer-面试题 50-2:字符流中第一个只出现一次的字符
题目描述:请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是’g’。当从该字符流中读出前六个字符”google”时,第一个只出现一次的字符是’l’。如果当前字符流没有存在出现一次的字符,返回#字符。样例输入:"google"输出:"ggg#ll"解释:每当字符流读入一个字符,就进行一次判...原创 2019-05-19 14:25:35 · 355 阅读 · 0 评论 -
剑指offer-面试题 50-1:字符串中第一个只出现一次的字符
题目描述:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出b。如果字符串中不存在只出现一次的字符,返回#字符。样例:输入:"abaccdeff"输出:'b'算法:哈希法class Solution {public: char firstNotRepeatingChar(string s) { if...原创 2019-05-19 14:29:55 · 182 阅读 · 0 评论 -
剑指offer-面试题 49:丑数
题目描述:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。求第n个丑数的值。样例输入:5输出:5注意:习惯上我们把1当做第一个丑数。算法:class Solution {public: int getUglyNumber(int n) { if(n<=0...原创 2019-05-19 15:01:26 · 164 阅读 · 0 评论 -
13. 机器人的运动范围
题目描述:地上有一个mm行和nn列的方格,横纵坐标范围分别是0∼m−10∼m−1和0∼n−10∼n−1。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于kk的格子。请问该机器人能够达到多少个格子?样例1输入:k=7, m=4, n=5输出:20样例2输入:k=18...原创 2019-08-11 15:58:38 · 112 阅读 · 0 评论 -
剑指offer-面试题 23:链表中环的入口结点
题目描述:给定一个链表,若其中包含环,则输出环的入口节点。若其中不包含环,则输出null。样例给定如上所示的链表:[1, 2, 3, 4, 5, 6]2注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。则输出环的入口节点3.算法:/** * Definition for singly-linked li...原创 2019-05-17 15:55:53 · 207 阅读 · 0 评论 -
剑指offer-面试题 60:骰子的点数
题目描述:将一个骰子投掷n次,获得的总点数为s,s的可能范围为n~6n。掷出某一点数,可能有多种掷法,例如投掷2次,掷出3点,共有[1,2],[2,1]两种掷法。请求出投掷n次,掷出n~6n点分别有多少种掷法。样例1输入:n=1输出:[1, 1, 1, 1, 1, 1]解释:投掷1次,可能出现的点数为1-6,共计6种。每种点数都只有1种掷法。所以输出[1, 1,...原创 2019-05-17 13:56:05 · 703 阅读 · 0 评论 -
剑指offer-面试题 25:合并两个排序的链表
题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。样例:输入:1->3->5 , 2->4->5输出:1->2->3->4->5->5算法:/** * Definition for singly-linked list. * struct ListNode { * ...原创 2019-05-11 13:34:56 · 156 阅读 · 0 评论 -
剑指offer-面试题 29::顺时针打印矩阵
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。样例输入:[ [1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]算法:class Solution {public: vector<int> printMatri...原创 2019-05-07 22:40:47 · 134 阅读 · 0 评论 -
剑指offer-面试题 28:对称的二叉树
题目描述:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。样例如下图所示二叉树[1,2,2,3,4,4,3,null,null,null,null,null,null,null,null]为对称二叉树: 1 / \ 2 2 / \ / \3 4 4 3如下图所示二叉树[1,2,2,null,4,...原创 2019-05-07 21:55:44 · 134 阅读 · 0 评论 -
剑指offer-面试题 62:圆圈中最后剩下的数字
题目描述:0, 1, …, n-1这n个数字(n>0)排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。样例输入:n=5 , m=3输出:3算法:使用 STL list 类型模拟圆圈。#include <list>class Solution {public: int lastR...原创 2019-05-07 21:03:26 · 138 阅读 · 0 评论 -
剑指offer-面试题 66:机器人的运动范围
题目描述:地上有一个mm行和nn列的方格,横纵坐标范围分别是0∼m−10∼m−1和0∼n−10∼n−1。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于kk的格子。请问该机器人能够达到多少个格子?样例1输入:k=7, m=4, n=5输出:20样例2输入:k=1...原创 2019-05-20 13:00:17 · 162 阅读 · 0 评论 -
剑指offer-面试题 56-1:数组中只出现一次的两个数字
题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。你可以假设这两个数字一定存在。样例输入:[1,2,3,3,4,4]输出:[1,2]算法:class Solution {public: vector<int> findNumsAppearOnce(vector<int>&...原创 2019-05-07 16:03:39 · 190 阅读 · 0 评论 -
剑指offer-面试题53:两个链表的第一个公共结点
题目描述:输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空节点。样例给出两个链表如下所示:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3输出第一个公...原创 2019-05-07 14:14:25 · 152 阅读 · 0 评论 -
剑指offer-面试题 55-2:平衡二叉树
题目描述输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。注意:规定空树也是一棵平衡二叉树。样例输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示, 5 / \ 7 11 / \ 12 9输出...原创 2019-05-14 16:34:19 · 133 阅读 · 0 评论 -
股票的最大利润
题目描述:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖一次该股票可能获得的利润是多少?例如一只股票在某些时间节点的价格为[9, 11, 8, 5, 7, 12, 16, 14]。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。样例输入:[9, 11, 8, 5, 7, 12, 16, 14]输出:11解法:如果数...原创 2019-05-05 15:25:41 · 612 阅读 · 0 评论 -
反转链表
题目描述:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。样例输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL解法一:不需要借助辅助空间。从第二个节点开始遍历,每次取出一个节点,然后采用头插法,插入到 head 后面就可以了。/**...原创 2019-05-05 14:00:30 · 144 阅读 · 0 评论 -
剑指offer:面试题39- 数组中出现次数超过一半的数字
题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解法一简单粗暴,时间复杂度O(nlogn)。先快排 ,可参考 快速排序。 再统计。class Solution {public: int M...原创 2019-03-27 13:50:36 · 125 阅读 · 0 评论 -
剑指offer-面试题 42:连续子数组的最大和
题目HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...原创 2019-03-23 20:56:18 · 216 阅读 · 0 评论 -
剑指offer:和为S的连续正数序列
题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正...原创 2019-03-26 17:49:08 · 100 阅读 · 0 评论 -
剑指offer:面试题57-和为S的两个数字
题目输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。解法采用双指针法 设置头尾两个指针。 如果两个指针指向的值之和大于S,则尾指针前移一位;如果两个指针指向的值之和小于S,则头指针后移一位; 满足条件再进行判断即可。cla...原创 2019-03-26 17:18:50 · 122 阅读 · 0 评论 -
剑指offer:左旋转字符串
题目汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解法一先对 K 与 字符序列长度 S.length() 取余,即 K % S.lengt...原创 2019-03-26 16:51:22 · 96 阅读 · 0 评论 -
剑指offer-面试题58-1:翻转单词顺序列
题目牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?先对整个句子进行翻...原创 2019-03-26 16:34:11 · 225 阅读 · 0 评论 -
剑指offer题解汇总
下面的链接有的没有提供面试题多少多少,是《剑指offer第二版》和牛客网剑指offer题目不是很匹配。使用C++语言。剑指offer-面试题 3-1:找出数组中重复的数字 剑指offer-面试题 3-2:不修改数组找出重复的数字 剑指offer-面试题5:替换空格 剑指offer-面试题 6:从尾到头打印链表 剑指offer-面试题 9:用两个栈实现队列 剑指offer-面试题1...原创 2019-03-29 16:57:44 · 1099 阅读 · 0 评论 -
面试题43:整数中1出现的次数(从1到n整数中1出现的次数)
题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。解法一:暴力法,面试官会不爽class Solution {...原创 2019-03-29 16:03:35 · 170 阅读 · 0 评论 -
剑指offer:数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。解法一:直接遍历,时间复杂度O(n)class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int len = 0; for(int i=0; i<data.size(); i++) ...原创 2019-03-29 14:28:08 · 117 阅读 · 0 评论 -
剑指offer-面试题 15:二进制中1的个数
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法一初始化无符号整型变量 bit = 1。 循环依次将 bit 与 数 做与运算,如果结果为0,则 bit 左移一位;否则计数器 count 加1,同时bit左移一位; 当 bit 为 0 时(比如一个int 型变量占32位,那么 bit 左移32次就会变成0,),循环停止,返回计数器 count 的...原创 2019-03-17 21:53:10 · 225 阅读 · 0 评论 -
剑指offer-面试题10:斐波那契数列
题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39解法一:非递归解法class Solution {public: int Fibonacci(int n) { if(n<=0) return 0; if(n==1) ...原创 2019-03-17 21:27:47 · 168 阅读 · 0 评论 -
剑指offer-面试题 6:从尾到头打印链表
题目:输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解法一:使用栈空间复杂度 O(n), 时间复杂度O(n)使用辅助空间栈,从头开始遍历链表,将链表中的元素依次入栈。 将栈中元素依次弹出。/*** struct ListNode {* int val;* struct ListNode *next;* ...原创 2019-03-17 20:58:36 · 227 阅读 · 0 评论