
剑指offer
Magnetosphere
关注呼吸
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer第18题:二叉树的镜像
剑指offer第18题:二叉树的镜像题目描述二叉树的镜像分析观测镜像二叉树的特点源码题目描述二叉树的镜像操作给定的二叉树,将其变换为源二叉树的镜像。分析观测镜像二叉树的特点对镜像二叉树的特点进行分析,不难发现,对于根节点而言,其值不变,其左、右儿子互换位置,并且左右子树都变成了镜像二叉树。源码/*struct TreeNode { int val; struct TreeN...原创 2019-08-22 17:53:09 · 216 阅读 · 0 评论 -
剑指offer第64题:滑动窗口的最大值
剑指offer第64题:滑动窗口的最大值题目描述滑动窗口的最大值源码题目描述滑动窗口的最大值给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2...原创 2019-08-25 15:31:20 · 178 阅读 · 0 评论 -
剑指offer第63题:数据流中的中位数
剑指offer第63题:数据流中的中位数题目描述数据流中的中位数源码题目描述数据流中的中位数如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。源码vecto...原创 2019-08-25 15:30:43 · 213 阅读 · 0 评论 -
剑指offer第62题:二叉搜索树的第K个结点
剑指offer第62题:二叉搜索树的第K个结点题目描述二叉搜索树的第K个结点源码题目描述二叉搜索树的第K个结点给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。源码/*struct TreeNode { int val; struct TreeNode *left; struct...原创 2019-08-25 15:30:31 · 171 阅读 · 0 评论 -
剑指offer第61题:序列化二叉树
剑指offer第61题:序列化二叉树题目描述序列化二叉树源码题目描述序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一...原创 2019-08-25 15:30:08 · 134 阅读 · 0 评论 -
剑指offer第60题:把二叉树打印成多行
剑指offer第60题:把二叉树打印成多行题目描述把二叉树打印成多行源码题目描述把二叉树打印成多行从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。源码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2019-08-25 15:29:56 · 248 阅读 · 0 评论 -
剑指offer第59题:按之字形顺序打印二叉树
剑指offer第59题:按之字形顺序打印二叉树题目描述按之字形顺序打印二叉树源码题目描述按之字形顺序打印二叉树请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。源码/*struct TreeNode { int val; struct TreeNode *left; s...原创 2019-08-25 15:29:43 · 299 阅读 · 0 评论 -
剑指offer第58题:对称的二叉树
剑指offer第58题:对称的二叉树题目描述对称的二叉树源码题目描述对称的二叉树请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。源码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeN...原创 2019-08-25 15:29:27 · 175 阅读 · 0 评论 -
剑指offer第57题:二叉树的下一个结点
剑指offer第57题:二叉树的下一个结点题目描述二叉树的下一个结点源码题目描述二叉树的下一个结点给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。源码/*struct TreeLinkNode { int val; struct TreeLinkNode *left; stru...原创 2019-08-25 15:28:56 · 142 阅读 · 0 评论 -
剑指offer第56题:删除链表中重复的节点
剑指offer第56题:删除链表中重复的节点题目描述删除链表中重复的节点源码题目描述删除链表中重复的节点在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5源码/*struct ListNode { int va...原创 2019-08-25 15:28:39 · 200 阅读 · 0 评论 -
剑指offer第55题:链表中环的入口结点
剑指offer第55题:链表中环的入口结点题目描述链表中环的入口结点源码题目描述链表中环的入口结点给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。源码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NUL...原创 2019-08-25 15:28:24 · 218 阅读 · 0 评论 -
剑指offer第54题:字符流中第一个不重复的字符
剑指offer第54题:字符流中第一个不重复的字符题目描述字符流中第一个不重复的字符源码题目描述字符流中第一个不重复的字符请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述:如果当前字符流没有存在出现一次的字符,返回#字...原创 2019-08-25 15:27:49 · 211 阅读 · 0 评论 -
剑指offer第65题:矩阵中的路径
剑指offer第65题:矩阵中的路径题目描述矩阵中的路径源码题目描述矩阵中的路径请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcc...原创 2019-08-25 15:31:49 · 247 阅读 · 0 评论 -
剑指offer第66题:机器人的运动范围
剑指offer第66题:机器人的运动范围题目描述机器人的运动范围源码题目描述机器人的运动范围地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 ...原创 2019-08-25 15:32:17 · 183 阅读 · 0 评论 -
剑指offer第6题:旋转数组的最小数字
剑指offer第6题:旋转数组的最小数字题目描述旋转数组的最小数字分析二分查找题目描述旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析二分查找...原创 2019-08-21 13:43:10 · 318 阅读 · 0 评论 -
剑指offer第17题:树的子结构
剑指offer第17题:树的子结构题目描述树的子结构分析源码题目描述树的子结构输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析有点小复杂,让手动判断一个试试,看看过程。如图所示,左侧为树A,右侧为树B,要查找树A中是否存在和树B结构一样的子树,我们可以分成两步:第一步在树A中找到和B的根结点的值一样的结点C,第二步再判断树A中以C为根结点...原创 2019-08-22 16:28:24 · 231 阅读 · 0 评论 -
剑指offer第16题:合并两个排序的链表
剑指offer第16题:合并两个排序的链表题目描述合并两个排序的链表分析思路一:新建一个链表,将两个链表的值按照大小顺序复制到新链表中。源码题目描述合并两个排序的链表输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。分析思路一:新建一个链表,将两个链表的值按照大小顺序复制到新链表中。源码/*struct ListNode { int va...原创 2019-08-22 14:04:00 · 131 阅读 · 0 评论 -
剑指offer第15题:反转链表
剑指offer第15题:反转链表题目描述反转链表分析递归思想源码题目描述反转链表输入一个链表,反转链表后,输出新链表的表头。分析递归思想若当前节点的next不为空,那么只需将当前节点。接到反转链表的尾节点上,并将当前节点的next指向NULL.源码/*struct ListNode { int val; struct ListNode *next; ListNode(int...原创 2019-08-22 09:28:50 · 271 阅读 · 0 评论 -
剑指offer第14题:链表中倒数k个节点
剑指offer第14题:链表中倒数k个节点题目描述链表中倒数k个节点分析链表的遍历思路1:从头遍历,计算每个节点的位置思路2:利用前后指针,同步更新。源码思路一:思路二题目描述链表中倒数k个节点输入一个链表,输出该链表中倒数第k个结点。分析链表的遍历思路1:从头遍历,计算每个节点的位置最直接的方法是,从头节点开始计算该节点的位置(倒数第几个,若2-1-2 ,那么头节点就倒数第3个),...原创 2019-08-22 09:06:21 · 266 阅读 · 0 评论 -
剑指offer第13题:调整数组顺序使奇数位于偶数前面
剑指offer第13题:调整数组顺序使奇数位于偶数前面题目描述调整数组顺序使奇数位于偶数前面分析思路一:从左到右遍历数组,引入两个数组分别按顺序保存奇数和偶数,再讲两个数组按照奇前偶后合并。源码题目描述调整数组顺序使奇数位于偶数前面输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置...原创 2019-08-21 20:12:38 · 240 阅读 · 0 评论 -
剑指offer第12题:数值的整数次方
剑指offer第12题:数值的整数次方题目描述数值的整数次方分析源码题目描述数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0.分析若base = 0 ,那么返回值为1。在base不等于0 时:1.exponent = 0,此时 返回值为1.2.exponent <...原创 2019-08-21 20:01:34 · 164 阅读 · 0 评论 -
剑指offer第11题:二进制中1的个数
剑指offer第11题:二进制中1的个数题目描述分析二进制 原码、反码、补码源码题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。例如:输入1 输出1分析二进制 原码、反码、补码二进制储存: 在计算机中,正整数储存用的原码,负整数储存用的补码。与运算:整数a的二进制末尾是1,则a & 1 = 1,否则 a & 0 = 0,所以可以用循环将整数右移...原创 2019-08-21 19:44:38 · 120 阅读 · 0 评论 -
剑指offer第10题:矩形覆盖
剑指offer第10题:矩形覆盖题目描述矩形覆盖分析递归源码题目描述矩形覆盖我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析递归覆盖2*n矩形方法有两种情况:1.先覆盖2*(n-1)的大矩形,然后用2*1的小矩形竖着覆盖最后一部分。2.先覆盖2*(n-2)的大矩形,然后用2*1的两块矩形横着覆盖最后...原创 2019-08-21 19:33:18 · 175 阅读 · 0 评论 -
剑指offer第9题:变态跳台阶
剑指offer第9题:变态跳台阶题目描述变态跳台阶分析源码题目描述变态跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。分析类似于跳台阶,要想跳到n阶,此时有n中情况:1.从0阶,跳上n阶到n阶,2.从1阶,跳上n-1阶到n阶3.从2阶,跳上n-2阶到n阶以此类推。。。n.从n-1阶,跳上1阶到n阶。总结上述...原创 2019-08-21 15:32:13 · 231 阅读 · 0 评论 -
剑指offer第8题:跳台阶
剑指offer第8题:跳台阶题目描述跳台阶分析源码递归方法递推方法题目描述跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析根据题意,青蛙一次可以跳1级台阶,2级台阶,那么要跳到n级有两种情况:1.先跳到n-1级,最后一步跳上1级到n级。2.先跳到n-2级,最后一步跳上2级到n级。假设跳到n级有F(n)种...原创 2019-08-21 15:12:38 · 435 阅读 · 0 评论 -
剑指offer第7题:斐波那契数列
剑指offer第7题:斐波那契数列题目表述斐波那契数列分析源码利用递归利用递推题目表述斐波那契数列大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39分析斐波那契数列:0,1,1,2,3,5,8,…规律是:a[k] = a[k-1]+a[k-2],(k>=2且为整数)。解法一:利用递归,a[0] = 0,a[1...原创 2019-08-21 14:39:04 · 125 阅读 · 0 评论 -
剑指offer第53题:表示数值的字符串
剑指offer第53题:表示数值的字符串题目描述表示数值的字符串源码题目描述表示数值的字符串请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。源码class Solution {public:...原创 2019-08-25 15:27:35 · 160 阅读 · 0 评论 -
剑指offer第52题:正则表达式匹配
剑指offer第52题:正则表达式匹配题目描述正则表达式匹配源码题目描述正则表达式匹配请实现一个函数用来匹配包括’.‘和’*‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配源码cl...原创 2019-08-25 15:27:20 · 186 阅读 · 0 评论 -
剑指offer第37题:数字在排序数组中出现的次数
剑指offer第37题:数字在排序数组中出现的次数题目描述数字在排序数组中出现的次数源码题目描述数字在排序数组中出现的次数统计一个数字在排序数组中出现的次数。源码class Solution {public: int GetNumberOfK(vector<int> data ,int k) { int count =0; for(...原创 2019-08-25 15:21:36 · 154 阅读 · 0 评论 -
剑指offer第36题:两个链表的第一个公共结点
剑指offer第36题:两个链表的第一个公共结点题目描述两个链表的第一个公共结点源码题目描述两个链表的第一个公共结点输入两个链表,找出它们的第一个公共结点。源码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Sol...原创 2019-08-25 15:20:59 · 161 阅读 · 0 评论 -
剑指offer第35题:数组中的逆序对
剑指offer第35题:数组中的逆序对题目描述数组中的逆序对源码题目描述数组中的逆序对在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^...原创 2019-08-25 15:20:36 · 156 阅读 · 0 评论 -
剑指offer第34题:第一个只出现一次的字符
剑指offer第34题:第一个只出现一次的字符题目描述第一个只出现一次的字符源码题目描述第一个只出现一次的字符在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).源码class Solution {public: int FirstNotRepeatingChar(st...原创 2019-08-25 15:20:18 · 112 阅读 · 0 评论 -
剑指offer第33题:丑数
剑指offer第33题:丑数题目描述丑数源码题目描述丑数把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。源码class Solution {public: int GetUglyNumber_Solution(int index) { ...原创 2019-08-25 15:19:38 · 154 阅读 · 0 评论 -
剑指offer第32题:把数组排成最小的数
剑指offer第32题:把数组排成最小的数题目描述把数组排成最小的数源码题目描述把数组排成最小的数输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。源码class Solution {public: string PrintMinNumber(vecto...原创 2019-08-25 15:18:57 · 198 阅读 · 0 评论 -
剑指offer第5题:用两个栈实现队列
剑指offer第5题:用两个栈实现队列题目表述:用两个栈实现队列分析栈、队列源码题目表述:用两个栈实现队列用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。分析栈、队列栈的特性是先进后出,队列的特性是先进先出。假设栈A为主栈,B为副栈,入栈时只需要将数据Push到A中即可,出栈稍微麻烦点,由于队列是先进先出,那么由于A中先进的在下面,那么将A中数据依次...原创 2019-08-21 09:23:33 · 164 阅读 · 0 评论 -
剑指offer第2题:替换空格
剑指offer第二题题目表述替换空格:分析利用两个指针,从数组尾部复制源码题目表述替换空格:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。例如:输入:Hello world输出:Hello%20world分析利用两个指针,从数组尾部复制直接的方法是,从头遍历,遇到空格...原创 2019-08-20 23:35:03 · 119 阅读 · 0 评论 -
剑指offer第4题:重建二叉树
剑指offer第四题:重建二叉树题目描述重建二叉树分析二叉树的遍历,递归源码题目描述重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析二叉树的遍历,递归利用递归的思路,(前列:前序遍历序列...原创 2019-08-21 08:53:47 · 217 阅读 · 0 评论 -
剑指offer第1题:二维数组中的查找
剑指offer第一题题目表述分析源码题目表述二维数组中的查找:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析源码...原创 2019-08-18 11:05:06 · 267 阅读 · 0 评论 -
剑指offer第3题:从尾到头打印链表
剑指offer第三题:从尾到头打印链表题目描述从尾到头打印链表:分析栈、翻转、递归源码题目描述从尾到头打印链表:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。分析栈、翻转、递归1.可将在从头至尾逐个遍历链表的时,将各节点值存入栈中,完毕后,再依次出栈存入vector中即可。2.直接在遍历过程中将值存入vector中,之后再reverse vector即可。3.利用...原创 2019-08-21 08:36:16 · 153 阅读 · 0 评论 -
剑指offer第38题:二叉树的深度
剑指offer第38题:二叉树的深度题目描述二叉树的深度源码题目描述二叉树的深度输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。源码/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int...原创 2019-08-25 15:21:56 · 109 阅读 · 0 评论