剑指OFFER
gq97
这个作者很懒,什么都没留下…
展开
-
剑指offer之矩形覆盖
剑指offer之矩形覆盖题目描述解题思路Code总结题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解题思路其实动手推一下就会发现是一个Fibonacci数列f(0) = 0;f(1) = 1;f(2) = 2;…f(n) = f(n-1)+f(n-2);Codecppclass S...原创 2019-03-09 16:55:04 · 86 阅读 · 0 评论 -
剑指offer之二叉树的下一个结点
剑指offer之二叉树的下一个结点题目描述解题思路Code题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。解题思路中序遍历的特点,左根右,分三种情况。如果一个树有右子树,则返回右子树。如果当前结点是其父节点的左子树,返回父节点如果当前结点是其父节点的右子树,返回第一个其父节点的左子树是...原创 2019-02-04 17:30:04 · 205 阅读 · 0 评论 -
剑指offer之删除链表中重复的结点
剑指offer之删除链表中重复的结点题目描述解题思路Code题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题思路原创 2019-02-04 15:36:33 · 250 阅读 · 0 评论 -
剑指offer之链表中环的入口结点
剑指offer之链表中环的入口结点 题目描述解题思路Code题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路努力回想终于想起了书上的做法,然而code中出现了段错误,主要是下面一段,仔细检查才发现。 if(p2->next) p2 = p2->next;改为 if(p2) p2 = p2->next;Code/...原创 2019-02-03 23:07:59 · 149 阅读 · 0 评论 -
剑指offer之字符流中第一个不重复的字符
剑指offer之字符流中第一个不重复的字符 题目描述输出描述解题思路Code题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。输出描述如果当前字符流没有存在出现一次的字符,返回#字符。解题思路哈希,字符的范围是...原创 2019-02-03 21:51:15 · 259 阅读 · 0 评论 -
剑指offer之两个链表的第一个公共结点
剑指offer之两个链表的第一个公共结点 题目描述解题思路Code题目描述输入两个链表,找出它们的第一个公共结点。解题思路只会暴力到怀疑人生,无果。书上给出了两种思路。由于两个链表尾部是一样的,所以方法1是用两个辅助栈存放两个链表,然后最后一个值和next地址相同的结点就是第一个公共结点,时空复杂度都是O(m+n)。方法2就更妙了,先获得两个链表的长度,然后让长的先走长-短的差的步数...原创 2019-01-28 23:24:17 · 473 阅读 · 0 评论 -
剑指offer之数组中的逆序对
剑指offer之数组中的逆序对 题目描述输入描述输入输出解题思路Code题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4...原创 2019-01-28 22:46:40 · 572 阅读 · 0 评论 -
剑指offer之合并两个排序的链表
剑指offer之合并两个排序的链表题目描述解题思路Code题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路链表的基本操作,递归版本比较简洁。Code非递归/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x...原创 2019-01-23 10:54:00 · 91 阅读 · 0 评论 -
剑指offer之表示数值的字符串
剑指offer之表示数值的字符串 题目描述解题思路Code题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。解题思路字符串类最烦的题,再次翻开了书敲代码,膜评论区的原创 2019-02-02 22:50:08 · 188 阅读 · 0 评论 -
剑指offer之正则表达式匹配
剑指offer之正则表达式匹配 题目描述解题思路Code题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与&quot原创 2019-02-02 22:15:42 · 308 阅读 · 0 评论 -
剑指offer之构建乘积数组
剑指offer之构建乘积数组 题目描述解题思路Code题目描述给定一个数组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]。不能使用除法。解题思路可以把乘积分成两部分,A[0]A[1]…A[i-1]和A[i+1]…*A[n-1],前一部分由前往后可以递推,后面部分则是由后往前递推。...原创 2019-02-02 21:37:48 · 208 阅读 · 0 评论 -
剑指offer之数组中重复的数字
剑指offer之数组中重复的数字 题目描述解题思路Code题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路书上的解法妙,评论区更是大放异彩Codecl...原创 2019-02-02 21:08:50 · 176 阅读 · 1 评论 -
剑指offer之把字符串转换成整数
剑指offer之把字符串转换成整数 题目描述输入描述输出描述解题思路Code题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述输入一个字符串,包括数字字母符号,可以为空输出描述如果是合法的数值表达则返...原创 2019-02-02 20:44:00 · 189 阅读 · 0 评论 -
剑指offer之反转链表
剑指offer之反转链表 题目描述解题思路Code题目描述输入一个链表,反转链表后,输出新链表的表头。解题思路链表的基本操作,注意传入空指针时直接返回。Code/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class ...原创 2019-01-22 22:56:06 · 170 阅读 · 0 评论 -
剑指offer之数值的整数次方
剑指offer之数值的整数次方 题目描述解题思路Code题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解题思路可用快速幂,不过需要注意指数为负数时是求倒数,此时底数不能为0Codeclass Solution {public: double getPower(double base, int expo...原创 2019-01-22 22:41:48 · 83 阅读 · 0 评论 -
剑指offer之对称的二叉树
剑指offer之对称的二叉树 题目描述解题思路Code题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路递归检查左子树和右子树是否相等。Code/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *...原创 2019-02-04 17:42:55 · 139 阅读 · 0 评论 -
剑指offer之按之字形顺序打印二叉树
剑指offer之按之字形顺序打印二叉树 题目描述解题思路Code题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路我大概是看书看傻了,书上的方法记混了,一会想用栈,一会想先存左子树再存右子树下一层相反,还好最后冷静分析,奇数层顺序遍历,偶数层用栈存。注意一开始传入空指针的情况。...原创 2019-02-04 19:29:55 · 231 阅读 · 0 评论 -
剑指offer之把二叉树打印成多行
剑指offer之把二叉树打印成多行 题目描述解题思路Code题目描述从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路bst常规题,用两个变量控制层数的方法棒。Code/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; Tree...原创 2019-02-05 10:17:07 · 184 阅读 · 0 评论 -
剑指offer之翻转单词顺序列
剑指offer之翻转单词顺序列 题目描述解题思路Code题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转...原创 2019-01-30 16:57:50 · 185 阅读 · 0 评论 -
剑指offer之左旋转字符串
剑指offer之左旋转字符串 题目描述解题思路Code总结题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路本菜借助了辅助空间,空间...原创 2019-01-30 16:35:31 · 116 阅读 · 0 评论 -
剑指offer之和为S的两个数字
剑指offer之和为S的两个数字题目描述输出描述解题思路Code题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述对应每个测试案例,输出两个数,小的先输出。解题思路Two pointers的思想Codeclass Solution {public: vector<int...原创 2019-01-30 12:48:47 · 348 阅读 · 0 评论 -
剑指offer之和为S的连续正数序列
剑指offer之和为S的连续正数序列题目描述输出描述解题思路Code题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序...原创 2019-01-30 11:49:07 · 230 阅读 · 0 评论 -
剑指offer之数组中只出现一次的数字
剑指offer之数组中只出现一次的数字题目描述解题思路Code总结题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。解题思路异或大法好,如果一个数组只有1个数字出现一次,其他数字都出现偶数次,那么异或这个数组的结果就是那个数字(相同为0,相同的数字会抵消)。如果这个数组中有两个数字只出现了一次,那么就需要划分子数组,使得每个子数组中只...原创 2019-01-30 09:58:18 · 141 阅读 · 0 评论 -
剑指offer之平衡二叉树
剑指offer之平衡二叉树 题目描述解题思路Code题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路平衡二叉树成立的条件,左右子树的深度差不超过1。采用后序遍历可以避免访问重复的结点。Codeclass Solution {public: bool IsBalanced(TreeNode* pRoot, int *pDepth) { if(...原创 2019-01-29 22:13:58 · 296 阅读 · 0 评论 -
剑指offer之二叉树的深度
剑指offer之二叉树的深度 题目描述解题思路Code题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路常规dfs。Code/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNo...原创 2019-01-29 20:14:12 · 238 阅读 · 0 评论 -
剑指offer之数字在排序数组中出现的次数
剑指offer之数字在排序数组中出现的次数题目描述解题思路Code题目描述统计一个数字在排序数组中出现的次数。解题思路排序的数组要马上想到二分,其中二分有求第一个大于等于值的lower_bound算法,也有求第一个大于值的upper_bound算法,最后注意right位置对应的数组值可能正好等于要查找的值,此时right++Code非递归class Solution {pu...原创 2019-01-29 20:07:47 · 116 阅读 · 0 评论 -
剑指offer之机器人的运动范围
剑指offer之机器人的运动范围 题目描述解题思路Code题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人...原创 2019-02-05 22:31:18 · 103 阅读 · 0 评论 -
剑指offer之矩阵中的路径
剑指offer之矩阵中的路径 题目描述解题思路Code题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,5,1}, {2,[3,4,...原创 2019-02-05 22:17:27 · 207 阅读 · 0 评论 -
剑指offer之滑动窗口的最大值
剑指offer之滑动窗口的最大值 题目描述解题思路Code题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{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,5,1}, {2,[3...原创 2019-02-05 21:05:01 · 133 阅读 · 0 评论 -
剑指offer之数据流中的中位数
剑指offer之数据流中的中位数 题目描述解题思路Code总结题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。解题思路Partition函数的使...原创 2019-02-05 20:28:34 · 151 阅读 · 0 评论 -
剑指offer之二叉搜索树的第k个结点
剑指offer之二叉搜索树的第k个结点 题目描述解题思路Code题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。解题思路BST的第K大其实就是中序遍历的第K个元素,修改了下输入,加上了引用&,开心的过了。Code/*struct TreeNode { int val; ...原创 2019-02-05 19:10:19 · 265 阅读 · 0 评论 -
剑指offer之序列化二叉树
剑指offer之序列化二叉树 题目描述解题思路Code题目描述请实现两个函数,分别用来序列化和反序列化二叉树解题思路输入非要用char*,本菜被弄得头大,看了评论区知道了用指向指针的指针可以返回修改过的指针,*(str)++真香,还是java香Code/*struct TreeNode { int val; struct TreeNode *left; ...原创 2019-02-05 18:13:10 · 216 阅读 · 0 评论 -
剑指offer之链表中倒数第k个结点
剑指offer之链表中倒数第k个结点题目描述解题思路Code题目描述输入一个链表,输出该链表中倒数第k个结点。解题思路用两个指针,初始第二个在离第一个的k-1位置处,然后同时移动直到第二个到最后一个结点,此时第一个指针就是指向倒数第k个结点。需要注意传入空指针,没有倒数第k个结点等情况。类似的题有通法,比如第二个指针比第一个指针移动速度快可以得到中间的结点。Code/*struc...原创 2019-01-22 22:37:46 · 92 阅读 · 0 评论 -
剑指offer之调整数组顺序使奇数位于偶数前面
剑指offer之调整数组顺序使奇数位于偶数前面题目描述解题思路Code题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路新开一个数组,先存数组中的奇数,再存数组的偶数。另挂上评论区的热门:链接:https://www.nowcoder.com/qu...原创 2019-01-22 22:30:52 · 80 阅读 · 0 评论 -
剑指offer之从上往下打印二叉树
剑指offer之从上往下打印二叉树 题目描述解题思路Code题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路bfsCode/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL...原创 2019-01-23 22:55:57 · 227 阅读 · 0 评论 -
剑指offer之栈的压入、弹出序列
剑指offer之栈的压入、弹出序列 题目描述解题思路Code题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路模拟进栈和...原创 2019-01-23 22:37:25 · 85 阅读 · 0 评论 -
剑指offer之包含min函数的栈
剑指offer之包含min函数的栈 题目描述解题思路Code题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路看书知道了开一个辅助栈,用于存放最小的值Codeclass Solution {public: int data1[10000], minData[10000]; int pHead = ...原创 2019-01-23 21:59:49 · 133 阅读 · 1 评论 -
剑指offer之顺时针打印矩阵
剑指offer之顺时针打印矩阵 题目描述解题思路Code题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路附上评论区的热门代码://链接:https:...原创 2019-01-23 21:06:28 · 103 阅读 · 0 评论 -
剑指offer之二叉树的镜像
剑指offer之二叉树的镜像题目描述解题思路Code题目描述操作给定的二叉树,将其变换为源二叉树的镜像。解题思路还是递归遍历,交换左右子树就好了Code/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(N...原创 2019-01-23 19:47:42 · 131 阅读 · 0 评论 -
剑指offer之树的子结构
剑指offer之树的子结构题目描述解题思路Code题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路递归,先判断当前两结点是否相等,然后如果B的左子树不空,则判断A的左子树和B的左子树是否一样,若相同,则如果B的右子树也不为空且和A的一样时,返回true,当B的左或右子树为空时,则跳过对应的验证。若当前结点不等,则return A...原创 2019-01-23 19:29:33 · 94 阅读 · 0 评论