![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指Offer
小四姑娘
这个作者很懒,什么都没留下…
展开
-
剑指offer刷题记录66--二叉树的最近公共祖先II
注意和上一题区别开来,上一题二叉搜索树的最近公共祖先。这一题我们用递归的思想来解答。来自力扣大佬的解析原创 2020-06-08 21:20:55 · 120 阅读 · 0 评论 -
剑指offer刷题记录65--二叉搜索树的最近公共祖先I
来自力扣大佬的解析代码如下原创 2020-06-08 20:33:45 · 95 阅读 · 0 评论 -
剑指offer刷题记录64--构建乘积数组
题目解析刚开始没有看懂这道题目,后来仔细一琢磨,终于是明白了。我们先来看一下这个题目。会发现,B[i] 公式中没有A[i] 项,也就是说如果可以使用除法的话,就可以用公式B[i]=A[0]A[1]…*A[n-1]/A[i]来计算B[i],但是题目要求不能使用,因此我们只能另想办法。现在要求不能使用除法,只能用其他方法。一个直观的解法是用连乘n-1个数字得到B[i]。显然这个方法需要O(n*n)的时间复杂度。好在还有更高效的算法。可以把B[i]=A[0]A[1]…*A[i-1]A[i+1]…*A[n-.原创 2020-06-08 09:30:42 · 141 阅读 · 0 评论 -
剑指offer刷题记录63--求1+2+3+......+n
解题思路:题目本身不难,有很多种解法,但是当被限制这些条件后,就不得不慎重解题了。最秀的代码来自力扣大佬的解答原创 2020-06-07 14:31:52 · 138 阅读 · 0 评论 -
剑指offer刷题记录62--股票最大利润
解题思路:暴力法(做了那么多题目,第一想到的还是暴力解法。。。)解题思路2 动态规划来自力扣大佬的解析代码优化原创 2020-06-07 11:20:44 · 104 阅读 · 0 评论 -
剑指offer刷题记录61--圆圈中最后剩下的数字
来自力扣大佬的解析解题思路阅读提示(全文最重要的点):只关心最终活着那个人的序号变化1 约瑟夫问题这个问题实际上是约瑟夫问题,这个问题描述是:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报。如此反复,最后剩下一个,求最后的胜利者。2 问题转换...原创 2020-06-06 22:30:46 · 169 阅读 · 0 评论 -
剑指offer刷题记录60--扑克牌中的顺子
解法1 排序法解法二 集合set根据题意,此 555 张牌是顺子的 充分条件如下:算法流程代码实现原创 2020-06-06 09:49:02 · 119 阅读 · 0 评论 -
剑指offer刷题记录59--n个骰子的点数(动态规划)
解法1 暴力解法我们可以这样考虑,找出所有骰子和的可能值得概率值。(1)当 n=1 的时候,概率都是 1/6。(2)当 n=2 的时候,s=2的概率值为1/36,s=3的概率值为1/18,s=4的概率值为1/12…s=12的时候…(注意这里的和是从2开始)(3)当 n=3 的时候,s=3的概率值为1/216,s=4的概率值为 1/72……后面的就不计算了,也就是说,n=3时, 将第三个骰子(六个1/6)添加到第二个骰子的结果(n=2的结果在上个循环已经求得)上去。n=4时, 将第四个骰子(六个1.原创 2020-06-05 22:08:01 · 146 阅读 · 0 评论 -
剑指offer刷题记录58--队列的最大值
解法1 暴力解法直接实现一个普通的队列,查询最大值遍历计算。原创 2020-06-05 20:17:49 · 98 阅读 · 0 评论 -
剑指offer刷题记录56--左旋转字符串
来自力扣大佬的解析关于这三种代码的测试请看 链接原创 2020-06-04 21:10:22 · 83 阅读 · 0 评论 -
剑指offer刷题记录55--翻转单词的顺序
来自力扣大佬的解析注意 split() 与 split(" ") 的区别:传送门原创 2020-06-04 20:38:31 · 104 阅读 · 0 评论 -
剑指offer刷题记录54--和为S的连续正数序列
解法一:数学问题,数学解决时间复杂度:原创 2020-06-04 09:29:58 · 118 阅读 · 0 评论 -
剑指offer刷题记录53--数组中数字出现的次数II
解法1 排序后比较元素的左右值是否等于元素。解法二 位运算力扣大佬的解析原创 2020-06-03 21:08:22 · 126 阅读 · 0 评论 -
剑指offer刷题记录52--和位S的两个数字
解法1 字典法(哈希)用字典存储已经遍历的数字,如果target-i在字典中,则直接返回[i, target-i], i 为当前遍历到的数字。时间复杂度O(N),空间复杂度O(N)解法二 双指针代码如下时间复杂度:O(N) N为数组nums 的长度,双指针共同遍历整个数组。空间复杂度O(1):变量i,j使用常数大小的额外空间。...原创 2020-06-03 20:48:25 · 122 阅读 · 0 评论 -
剑指offer刷题记录51--数组中数字出现的次数
官方题解在这里解释一下因为异或运算规则为:两数相同的结果为0,不同的结果为1。所以异或整个数组,由于数组中所有相同的数值在异或运算中都变为0,导致结果只剩下两个不同的数值的异或:例如:nums=[4,1,4,6],转换成二进制为0100,0001,0100,0110,那么对这四个数字进行异或,得到的结果为0001^0110,其实也就是数组中这两个不同数字异或的结果。那么从上面可以知道,我们之后的操作只需要将这两个数字分出来就好。怎么分呢?还是以 nums = [4,1,4,6] 为例,nums.原创 2020-06-03 10:05:56 · 133 阅读 · 0 评论 -
剑指offer刷题记录50--平衡二叉树
来自力扣大佬的解析方法1和方法2的区别:方法二最差情况下,需要从每个节点开始 计算树的深度,因此会产生许多重复遍历。例如计算根节点深度,和计算根节点的左子节点的深度时,两者都需要遍历根节点的左子节点,以此类推。而方法一只需要一次遍历,从最底向上回溯信息,没有重复遍历。...原创 2020-06-02 08:51:13 · 112 阅读 · 0 评论 -
剑指offer刷题记录49--二叉树的深度I
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解题思路1 DFS递归实现关于空间复杂度O(N)的理解:在递归的时候,系统也是需要使用栈空间。例如本题,每开启一个递归函数,都需要保存root(还需要保存其他的,有兴趣可以查看力扣探索里的递归复杂度分析),因此如果二叉树退化成链表,递归就会累计N的深度,临时保存N个root和“其他东西”,因此复杂度是O(N)。解题思路2 层序遍历参考链接...原创 2020-06-01 09:54:40 · 122 阅读 · 0 评论 -
剑指offer刷题记录48--二叉搜索树的第K大节点
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解析![在这里插入图片描述](https://img-blog.csdnimg.cn/20200601090433723.png?x-oss-process=image/watermark,type_Z...原创 2020-06-01 09:13:28 · 91 阅读 · 0 评论 -
剑指offer刷题记录47--在排序数组中查找数字(1)
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解题思路1:暴力解法遍历整个列表,若等于目标值,则计数加1解题思路2:二分查找使用二分查找的算法,查找多个连续的target的第一个和最后一个的索引,相减即可得到相应的target数量。来自力扣大佬的解析代码如下...原创 2020-05-31 17:50:32 · 92 阅读 · 0 评论 -
剑指offer刷题记录46--两个链表的第一个公共节点(程序员的爱情)
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。思路解析假设两个链表的长度分别是L1+C,L2+C,C为公共部分的长度。那么当第一个人走了L1+C步后,回到第二个人的起点走L2步;与此同时,第二个人走了L2+C步后,回到第一个人的起点走L1步。当两个人走的步数都为L1+L2+C时这两个人就相遇了。代码如下复杂度分析时间复杂度:O(M+N)空间复杂度:O(1)参考链接 强烈建议看原文的解析。原创 2020-05-30 09:46:34 · 173 阅读 · 0 评论 -
剑指offer刷题记录44--第一个只出现一次的字符
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解析原创 2020-05-29 09:01:52 · 118 阅读 · 0 评论 -
剑指offer刷题记录43--丑数
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。力扣大佬的解析原创 2020-05-28 19:47:09 · 102 阅读 · 0 评论 -
剑指offer刷题记录42--最长不含重复字符的子字符串
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。原创 2020-05-28 09:11:08 · 128 阅读 · 0 评论 -
剑指offer刷题记录41--礼物的最大价值
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解析代码如下复杂度分析原创 2020-05-27 09:16:07 · 121 阅读 · 0 评论 -
剑指offer刷题记录40--把数字翻译成字符串
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解题思路来自力扣大佬的解析代码如下原创 2020-05-26 09:38:16 · 92 阅读 · 0 评论 -
剑指offer刷题记录39--把数组排成最小的数(存有问题)
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解法一:排序法(暴力求解)原创 2020-05-25 20:13:01 · 124 阅读 · 0 评论 -
剑指offer刷题记录38--数字序列中某一位的数字
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解析代码如下原创 2020-05-25 09:22:11 · 114 阅读 · 0 评论 -
剑指offer刷题记录37--1~n整数中1出现的次数
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。参考链接 不得不说大佬的解析太厉害了,我只是资料的搬运工,还是得要多多学习。代码如下...原创 2020-05-24 10:17:23 · 111 阅读 · 0 评论 -
剑指offer刷题记录36--连续子数组的最大和
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解题思路在遍历过程中,sum的值和i有直接关系:若...原创 2020-05-23 20:39:32 · 130 阅读 · 0 评论 -
剑指offer刷题记录35--数据流中的中位数(存有问题)
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解法一:排序法此方法比较简单,我们只需要将添加的数保存在数组中,然后将数组排序,返回中间位置的数即可。复杂度分析时间复杂度:O(nlogn)。addNum()函数消耗了O(1)的时间复杂度,findMedian()函数使用了排序,时间复杂度为O(nlogn)。因此总的时间复杂度为O(1) + O(nlogn) = O(nlogn)。空间复杂度:O(n)解原创 2020-05-20 15:20:57 · 127 阅读 · 0 评论 -
剑指offer刷题记录34--最小的K个数
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解法一:快排对原数组从小到大排序后取出前K个数即可,该方法并不推荐。解法二:参考链接...原创 2020-05-20 10:14:26 · 110 阅读 · 0 评论 -
剑指offer刷题记录33--数组中出现次数超过一半的数字
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解法一时间复杂度为O(log2N)解法二 摩尔投票法参考链接...原创 2020-05-20 09:20:06 · 102 阅读 · 0 评论 -
剑指offer刷题记录32--字符串的排列(回溯法)
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解析本题可能有些不太好理解,结合剑指offer原书看看。...原创 2020-05-19 15:57:41 · 111 阅读 · 0 评论 -
剑指offer刷题记录31--二叉搜索树与双向链表
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。题目分析解这道题的关键在于:二叉树搜索树的中序遍历为递增序列。来自力扣大佬的解析下面将算法流程与代码一起结合起来理解:...原创 2020-05-19 10:46:36 · 116 阅读 · 0 评论 -
剑指offer刷题记录30--二叉树中和为某一值的路径
题目分析本问题是典型的二叉树方案搜索问题,使用回溯法解决,其包含先序遍历 + 路径记录两部分先序遍历:按照“根、左、右”的顺序,遍历树的所有节点。路径记录:在先序遍历中,记录从根节点到当前节点的路径。当路径为 ① 根节点到叶节点形成的路径 且 ② 各节点值的和等于目标值 sum 时,将此路径加入结果列表。算法流程pathSum(root, sum) 函数:初始化:结果列表 res ,路径列表 path。返回值: 返回 res 即可。递归终止条件:若节点node 为空,则直接返回。递推工.原创 2020-05-17 17:10:23 · 122 阅读 · 0 评论 -
剑指offer刷题记录29--二叉树的后序遍历
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解答解法二:代码如下原创 2020-05-17 15:47:28 · 107 阅读 · 0 评论 -
剑指offer刷题记录28--从上到下打印二叉树3
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。题目解析与前面两题的解法类似,只是加个判断即可。来自力扣大佬的解析代码如下此题还有其他解法,在这就不一一给出,请参考链接...原创 2020-05-16 10:33:39 · 102 阅读 · 0 评论 -
剑指offer刷题记录27--从上到下打印二叉树2
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解答原创 2020-05-15 10:09:45 · 105 阅读 · 0 评论 -
剑指offer刷题记录26--从上到下打印二叉树1
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。来自力扣大佬的解答代码如下原创 2020-05-15 09:13:06 · 138 阅读 · 0 评论 -
剑指offer刷题记录25--栈的压入,弹出序列
该系列博客内容主要是《剑指Offer》中的经典题目,结合在刷题过程中见到的一些精彩的解题过程,从而在这里记录下来。代码以Python3实现。解题思路(来自力扣大佬的解析)代码如下原创 2020-05-14 10:15:15 · 120 阅读 · 0 评论