
剑指offer刷题之路
God_Leek
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
剑指offer:反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。AC代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(ListNo...原创 2019-06-05 10:01:09 · 143 阅读 · 0 评论 -
剑指offer:矩形覆盖/跳台阶
题目描述矩形覆盖我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?跳台阶一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路说白了以上两个问题属于同一个问题。当然如果按照上述简单递归求解的话是很耗时的,因为其中含有很...原创 2019-06-05 09:26:36 · 127 阅读 · 0 评论 -
剑指offer:正则表达式匹配
题目描述请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配解题思路1. 如果模式的下一个字符不为"*" (1)如果当前字符匹配,则匹配...原创 2019-09-16 10:24:43 · 95 阅读 · 0 评论 -
剑指offer:构建乘积数组
题目描述给定一个数组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}为例进行两轮累乘:从左往右累累乘:{1, 1, 2, 6, 24};从右往左累乘:{120, 60, 40, 30, 24}。...原创 2019-09-16 16:17:58 · 224 阅读 · 0 评论 -
剑指offer索引
目录剑指offer:构建乘积数组剑指offer:树中两个节点的最低公共祖先剑指offer:把字符串转换成整数剑指offer:不用加减乘除做加法剑指offer:求 1+2+3+...+n剑指offer:股票的最大利润剑指offer:圆圈中最后剩下的数剑指offer:扑克牌顺子...原创 2019-09-16 16:19:27 · 903 阅读 · 0 评论 -
树中两个节点的最低公共祖先
题目描述Leetcode : 235. Lowest Common Ancestor of a Binary Search TreeLeetcode : 236. Lowest Common Ancestor of a Binary Tree解题思路AC代码//leetcode 235class Solution {public: TreeNode* lowest...原创 2019-09-16 16:33:46 · 147 阅读 · 0 评论 -
剑指offer:把字符串转换成整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述输入一个字符串,包括数字字母符号,可以为空输出描述如果是合法的数值表达则返回该数字,否则返回0解题思路不说了,很简单,重点是符号位的判断,还有就...原创 2019-09-16 16:41:04 · 141 阅读 · 0 评论 -
剑指offer:不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。解题思路a ^ b 表示没有考虑进位的情况下两数的和,(a & b) << 1 就是进位。递归会终止的原因是 (a & b) << 1 最右边会多一个 0,那么继续递归,进位最右边的 0 会慢慢增多,最后进位会变为0,递归终止。AC代码class S...原创 2019-09-16 20:18:16 · 141 阅读 · 0 评论 -
剑指offer:求 1+2+3+...+n
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。解题思路使用递归解法最重要的是指定返回条件,但是本题无法直接使用 if 语句来指定返回条件。条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句。利用这一特性,将递归的返回条件取...原创 2019-09-16 20:40:18 · 185 阅读 · 0 评论 -
股票的最大利润
题目描述可以有一次买入和一次卖出,买入必须在前。求最大收益。解题思路典型的动态规划问题,思路见下面的代码注释。AC代码class Solution {public: int maxProfit(vector<int>& prices) { int len = prices.size(); int dp_0 =...原创 2019-09-16 21:21:59 · 160 阅读 · 0 评论 -
剑指offer:圆圈中最后剩下的数
题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去.....原创 2019-09-16 22:52:52 · 245 阅读 · 0 评论 -
剑指offer:从尾到头打印链表
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解题思路很简单啦,利用C++ STLstack先进后出的性质,将链表的每一个元素push到一个stack,然后pop即可得到结果。AC代码/*** struct ListNode {* int val;* struct ListNode *next;* ...原创 2019-06-05 00:22:36 · 105 阅读 · 0 评论 -
剑指offer:二叉树的镜像
花絮二叉树的反转引发的血案使用 macOS 的朋友大部分都用过 Homebrew。2015年,Homebrew 的作者 Max Howell 在 Twitter 上发布了一条消息:Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree ...原创 2019-06-05 00:12:30 · 166 阅读 · 0 评论 -
剑指offer:二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路二叉树的天然递归结构决定了解决二叉树问题必用递归思路。如果当前节点为空,则表示以当前节点为根的二叉树深度为0;否则,递归求解左右子树的深度,返回其中的最大者,还要加上当前节点的一层,整体思路很清晰。AC代码/*struct TreeN...原创 2019-06-05 13:57:47 · 131 阅读 · 0 评论 -
剑指offer:从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印,也就是二叉树的层序遍历。解题思路二叉树的层序遍历为固定思路,需要用到辅助数据结构——队列。从根节点开始遍历,如果根节点为空,则返回空;否则,将根节点加入队列。当队列不为空时,进行如下循环:队头节点出队,元素保存到返回的vector,然后将其左右孩子分别入队,直到队列为空停止循环。AC代码/*struct T...原创 2019-06-05 14:25:14 · 105 阅读 · 0 评论 -
剑指offer:数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。解题思路首先,这道题看起来很简单,事实上确实很简单,只要遍历数组就可以了,或者利用unordered_map保存每个数字出现的频次,能够达到O(N)的时间复杂度。但我想着应该没这么简单,于是便采用了二分查找法求解这道题。首先用二分查找法找到要寻找的数字出现的位置,然后在该位置前后分别进行搜索即可。AC代码class Sol...原创 2019-06-05 15:00:59 · 107 阅读 · 0 评论 -
剑指offer:左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路首先有一个陷阱,当n很大时,会出现超时。因此需要加一步对字符串长度的取余数操作。剩...原创 2019-06-05 15:17:06 · 137 阅读 · 0 评论 -
剑指offer:二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解题思路首先会想到暴力查找,不过如果题目的最优解法是暴力查找的话,那就不叫面试题了。于是有了以下解法,虽然解法不一定是最优,但肯定大大优于暴力解法。假如我们查找的元素是12,首先考察每...原创 2019-06-06 14:34:31 · 140 阅读 · 0 评论 -
剑指offer:替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路刚开始开始没搞懂length的意思,length为str的总长度。个人感觉这个题目有点问题,有点没搞清楚测试用例是怎么设计的。就当学习学习思路了。整体思路为:将字符串扩容,从最后的字符开始复制,如果遇到的不...原创 2019-06-06 16:02:19 · 104 阅读 · 0 评论 -
剑指offer:用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路定义两个栈stack1和stack2,stack1用来保存push的内容,stack2用来执行pop操作。首先是push操作,stack1的push操作没有任何限制,stack1直接执行即可。将stack1的元素顺序弹出并压入stack2,这样就能实现queue的先进先出的性质。直接...原创 2019-06-06 16:35:22 · 147 阅读 · 0 评论 -
剑指offer:对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路采用递归方法实现。如果根节点为空,则返回true; 否则,检查左右子树是否对称。检查通过调用一个函数实现,该函数用来判断两个二叉树是否为镜像对称。解题代码/*struct TreeNode { int val; struct ...原创 2019-06-04 21:58:16 · 199 阅读 · 0 评论 -
剑指offer:数组中的重复数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路首先,必须对数组进行遍历,在遍历过程中,在基于哈希表实现的unordered_set中进行查找,如果当前数...原创 2019-06-04 23:12:24 · 102 阅读 · 0 评论 -
剑指offer:合并两个排序的链表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路建立虚拟头结点,从两个链表的头结点开始遍历,将val较小的节点插入头结点代表的链表,当有一个链表为空时,结束程序。注意点:当两个链表的长度不一样时,如果有一个链表遍历到空,则使p指向非空的链表,结束循环即可。 注意虚拟头结点的使用。 循环条件及if条件要注意,很容易写...原创 2019-06-04 23:58:50 · 106 阅读 · 0 评论 -
剑指offer:扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2019-09-16 23:01:23 · 147 阅读 · 0 评论