剑指Offer
--FGC--
书山有路勤为径,学海无涯苦作舟
展开
-
二叉树的深度
二叉树的深度 时间限制:1秒 空间限制:32768K题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题目分析 首先给出一棵二叉树 T00_0 / \ T11_1 T22_2 / \ T33_...原创 2018-07-16 10:40:58 · 242 阅读 · 0 评论 -
对称的二叉树
对称的二叉树时间限制:1秒 空间限制:32768K对称的二叉树 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。...原创 2018-07-18 10:58:02 · 230 阅读 · 1 评论 -
链表中环的入口节点
链表中的入口节点时间限制:1秒 空间限制:32768K 题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。题目分析(1)首先判断链表是否有环,我们可以通过两个指针,以不同的速度遍历链表,如果最终两个指针相遇,则证明链表有环,如果遇到空指针,则链表无环。(2)如果有环,获取环上的节点数n(3)定义两个指针,一个先走n个节点,然后同时往前...原创 2018-07-18 19:57:24 · 191 阅读 · 0 评论 -
旋转字符串
旋转字符串时间限制:1秒 空间限制:32768K题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!题目分析对于题目...原创 2018-07-18 20:25:08 · 141 阅读 · 0 评论 -
把二叉树打印成多行
把二叉树打印成多行时间限制:1秒 空间限制:32768K题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。题目分析(1)首先定义一个二维int型vector,然后前序遍历二叉树,并返回当前节点的深度(2)将当前节点的值存入对应层的vector数组中(3)遍历完所有节点后,vector数组即为层次遍历的倒叙结果(4)将ve...原创 2018-07-19 10:54:09 · 144 阅读 · 0 评论 -
圆圈中最后剩下的数
圆圈中最后剩下的数时间限制:1秒 空间限制:32768K 热度指数:99914题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品...原创 2018-07-19 15:24:37 · 123 阅读 · 0 评论 -
数字在排序数组中出现的次数
数字在排序数组中出现次数时间限制:1秒 空间限制:32768K题目描述统计一个数字在排序数组中出现的次数题目分析本题只需要通过二分查找,找到数字在数组中的位置,然后前后遍历数组,计算出现的次数即可。(题目没有说明是升序还是降序,需自行判断)代码实现class Solution {public: int GetNumberO...原创 2018-07-19 16:08:34 · 228 阅读 · 0 评论 -
二叉树的下一个节点
二叉树的下一个节点时间限制:1秒 空间限制:32768K 热度指数:87941题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目分析该题分为三种情况,(1)树为空时,返回NULL(2)当前节点右子树不为空时,找到右子树的最左边的左叶子节点,如果没有则返回右...原创 2018-07-19 18:43:07 · 114 阅读 · 0 评论 -
栈的压入弹出序列
栈的压入弹出序列时间限制:1秒 空间限制:32768K 题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题目分析...原创 2018-07-20 07:37:02 · 188 阅读 · 0 评论 -
二叉搜索树与双向链表
二叉搜索树与双向链表时间限制:1秒 空间限制:32768K题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题目分析下面给出一个二叉搜索树转换为双向链表的手工完成图。代码实现/*struct TreeNode { int val; struct TreeNode *l...原创 2018-07-20 16:49:58 · 190 阅读 · 0 评论 -
合并两个排序的链表
合并两个排序的链表时间限制:1秒 空间限制:32768K 题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目分析(1)首先建立一个指向新链表头的指针pHead(2)然后声明一个始终指向新链表尾部的指针p(3)如果两个链表均不为空,则将p指向数值小的节点,然后p往后移动一个节点,同时,小的节点所在的链表...原创 2018-07-20 21:01:19 · 111 阅读 · 0 评论 -
数组中出现次数超过一半的数字
数组中出现次数超过一半的数字时间限制:1秒 空间限制:32768K题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目分析根据题目要求中的数组特点:(1)定义两个变量iN和iNum,并初始化iN为数组的...原创 2018-07-20 21:28:02 · 115 阅读 · 0 评论 -
从上往下打印二叉树
从上往下打印二叉树时间限制:1秒 空间限制:32768K题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目分析本题考察层次遍历二叉树,通过一个队列存储树的节点。代码实现/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *rig...原创 2018-07-20 22:23:56 · 109 阅读 · 0 评论 -
数据流中的中位数
数据流中的中位数时间限制:1秒 空间限制:32768K题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。题目分析(1)声明两个堆min...原创 2018-07-21 10:20:20 · 521 阅读 · 0 评论 -
表示数值的字符串
表示数值的字符串时间限制:1秒 空间限制:32768K 热度指数:79290题目描述时间限制:1秒 空间限制:32768K 热度指数:79290题目分析首先说明一下数值的表示法则:(1)数值的前面有一个’+’或’-’表示数值的正负(2)数值中可能会有一个’.’用来表示小数,’.’的左边和右边为若干个数字(3)数值中可能通过科学记数法‘e’或’E’来表示指数,...原创 2018-07-21 15:46:30 · 137 阅读 · 0 评论 -
字符流中第一个不重复的字符
字符流中第一个不重复的字符 时间限制:1秒 空间限制:32768K 题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回#字符。题目分析ASCII码表中...原创 2018-07-18 09:40:41 · 428 阅读 · 0 评论 -
反转链表
题目:定义一个函数,输入一个链表i的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下: struct ListNode { int iData; ListNode *pNext;};程序源码:#include <iostream>struct ListNode{ int i...原创 2018-03-14 20:03:15 · 104 阅读 · 0 评论 -
不用加减乘除做加法
不用加减乘除做加法 时间限制:1秒 空间限制:32768K 热度指数:64338题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。题目分析 首先让我们回顾一下一个简单的加法计算步骤,计算77+155的结果: (1)我们将77和155各自对应的位相加,进位用括号表示,写到下一位上。 ...原创 2018-07-16 14:06:23 · 111 阅读 · 0 评论 -
二叉树的镜像
二叉树的镜像 时间限制:1秒 空间限制:32768K 热度指数:157793题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 原二叉树和镜像二叉树如下: 8 / \ 6 10 / \ / \ 5 7 9 11 原二叉树 8 / \ ...原创 2018-07-16 14:51:08 · 160 阅读 · 0 评论 -
构建乘积数组
变态跳台阶 时间限制:1秒 空间限制:32768K 热度指数:65371题目描述 给定一个数组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可以看作下表每行的乘积。 ...原创 2018-07-16 21:09:05 · 94 阅读 · 0 评论 -
求1+2+...+n
求1+2+…+n 时间限制:1秒 空间限制:32768K 热度指数:103360题目描述 求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。题目分析 可以通过定义一个n维的对象数组来实现n个数的加法,代码如下:代码实现class A{private: ...原创 2018-07-16 22:55:50 · 457 阅读 · 0 评论 -
用两个栈实现队列
用两个栈实现队列 时间限制:1秒 空间限制:32768K 热度指数:251357题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目分析 首先栈是先进后出,队列是先进先出,下面手动模拟一下一组操作。 “PSH3”,”POP”,”POP”,”PSH4”,”POP”,”PSH5”,”POP”,”POP”] ...原创 2018-07-17 09:10:11 · 173 阅读 · 0 评论 -
矩形覆盖
矩形覆盖 时间限制:1秒 空间限制:32768K题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?题目分析 假设一个2*n的大矩形有f(n)种覆盖方法,现将f(n)分为两步来实现: (1)把第一个2*1矩形看作整体,有一种覆盖方法,后面的2*(n-1)有f(n-...原创 2018-07-17 11:10:38 · 105 阅读 · 0 评论 -
连续子数组的最大和
连续子数组的最大和 时间限制:1秒 空间限制:32768K题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续...原创 2018-07-17 14:32:50 · 121 阅读 · 0 评论 -
平衡二叉树
平衡二叉树 时间限制:1秒 空间限制:32768K题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。题目分析 我们可以通过后序遍历二叉树,每遍历到一个节点时判断该节点是不是平衡二叉树并记录它的深度,如果是的话则返回true,否则返回false。代码实现如下:代码实现class Solution {public: bool IsB...原创 2018-07-17 15:44:14 · 98 阅读 · 0 评论 -
从1到n整数中1出现的次数
题目:输入一个整数n,求从1到n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1、10、11和12,1一共出现了5次。 程序代码:#include <iostream>//#include <cmath>int GetTimesOfNumbers(int n){ int iDi...原创 2018-03-23 20:46:47 · 136 阅读 · 0 评论 -
两个链表的公共节点
两个链表的公共节点 时间限制:1秒 空间限制:32768K题目描述 输入两个链表,找出它们的第一个公共结点。题目分析 我们首先定义两个辅助栈,然后依次将两个链表的节点压入栈中,然后从栈顶再依次往下比较两个栈的元素,直到遇到第一个不相等的节点时,前一个节点就是两个链表的公共节点。代码实现class Solution {public: Lis...原创 2018-07-17 16:32:14 · 1145 阅读 · 0 评论 -
旋转数组的最小数字
旋转数组的最小数字 时间限制:3秒 空间限制:32768K题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目分析 该题目采用...原创 2018-07-17 19:23:48 · 104 阅读 · 0 评论 -
包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。 程序源码:#include <iostream>// 函数名称:InitListStack// 函数功能:初始化链栈// 输入参数:// lst:链栈头结点// 输出...原创 2018-03-20 10:16:42 · 118 阅读 · 0 评论 -
数值的整数次方
#include <iostream>#include <cmath>double PowerOfUnsignedExponent(double base, unsigned int exponent){ double result = 1; if (exponent == 0) { return 1; } r...原创 2018-03-13 21:02:37 · 106 阅读 · 0 评论 -
调整数组顺序使奇数位位于偶数位前面
调整数组顺序使奇数位位于偶数位前面 时间限制:1秒 空间限制:32768K题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目分析 (1)从后往前遍历, (2)定义一个iEven和iOdd变量,分别记录当前遍历到的最...原创 2018-07-17 21:27:13 · 197 阅读 · 0 评论 -
二叉树中和为某一值的路径
二叉树中和为某一值的路径时间限制:1秒 空间限制:32768K题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)题目分析遍历二叉树的每个节点,每遍历一个节点,将节点压入路径中,当该节点为叶子节点时,判断路径...原创 2018-07-21 16:31:37 · 128 阅读 · 0 评论