![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法分析
文章平均质量分 64
程序胖
这个作者很懒,什么都没留下…
展开
-
面试经典 222. 完全二叉树的节点个数
二叉树我最近刷的特别多,差不多快刷完了,但是有一种题型差点给我忽略了,那就是完全二叉树,这也是一个很重要的题型,今天刚好有一道题目可以来复习一下完全二叉树的特性。当 右子树的深度 不如 左子树的深度 的时候,说明 左子树不是一个满的二叉树,但是右子树单独看是一个满的二叉树,所以可以通过 2的h次方求右子树的节点个数。当 左子树的深度 和 右子树的深度 一致的时候,说明 左子树是满的二叉树 可以通过 2的h次方求的左子树的节点个数。除了最后的叶子节点,其他层级节点都是满的。原创 2024-08-02 17:38:41 · 383 阅读 · 0 评论 -
面试经典 106. 从中序与后序遍历序列构造二叉树
从上面例子入手,后序遍历是 9,15,7,20,3,我们知道后序遍历的顺序是 左,右,根,所以左右一个元素肯定是根节点,这棵树的根节点就是 3。分治就是一种问题解决策略,它将一个大问题划分为多个相同或类似的子问题,然后递归地解决这些子问题,最后将子问题的解合并起来得到大问题的解。这是一个数据结构,是一种常见的树状数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点,如上图。所以这里我们可以将找出的 左子树 当作一个新的树,继续上述的操作,直到只剩一个节点为止,就如上述的 9 节点。原创 2024-07-08 11:09:24 · 332 阅读 · 0 评论 -
算法分析:预测赢家
前言这道题目可谓是我比较难理解的题目了,因为我一直想不通为啥,直到看到了视频,自己敲击了一遍才理解。题目网址:https://leetcode-cn.com/problems/predict-the-winner/方法一:递归方法可以说这个方法是直接了当的模拟每个玩家的最优解,如图所示所以根据上图可以大致分为三种情况第一种只剩下一个值给你第二种只剩下两个值给你选,那就选其中最大一个第三种数组还有很多值,给前后两个值给你选,那就要分不同的情况,需要将两个取值的结果进行递归我们详细来原创 2021-07-21 17:14:57 · 1508 阅读 · 0 评论 -
算法分析:求子数组的最大平均数
目录前言解法:滑动窗口总结前言这道题主要考察的是滑动窗口的算法思想,通过这一思想可以快速的做出来题目网址:https://leetcode-cn.com/problems/maximum-average-subarray-i/解法:滑动窗口滑动窗口这个方法的思想很简单,就是通过减去前一个,加上后一个的思想,遍历完数组,然后通过 max 来记录最大值,最后返回第一步:先将前 k 个数字加起来,得到2第二步,将 索引 i - k 的数字减去,加上索引 k 的数字,得到值 51原创 2021-07-02 15:38:37 · 169 阅读 · 0 评论 -
算法分析:合并两个有序数组
目录前言第一种方法:暴力解法第二种解法:归并排序第三种解法:优化归并排序总结前言这道题目说实话看起来很简单,就是把两个数组按顺序排序到一个新的数组里面,然后这两个数组还是有序的,但是这里面还有有学问的,一共三个方法,每个方法都是前面一个方法的进阶,所以还是很有讲究的。题目网址:https://leetcode-cn.com/problems/merge-sorted-array/第一种方法:暴力解法这种方法简单粗暴,就是把两个数组放到一起,然后直接进行排序。不多说直接上代码:clas原创 2021-07-02 15:17:57 · 1284 阅读 · 0 评论 -
算法分析:环形链表
目录前言第一种解法:哈希法第二种解法:快慢指针总结前言这道题目比较经典,因为我校招的时候遇到了,但是只是傻乎乎的以为只用一种哈希法做出来就好了,现在想想,人家想要我说的是另一种方法,就是快慢指针。题目链接:https://leetcode-cn.com/problems/linked-list-cycle/submissions/第一种解法:哈希法这个方法我觉得跟暴力法没有什么区别,就是通过一个set集合将所有节点存起来,当有两个节点相同的时候就说明这个链表有环代码如下:public原创 2021-06-30 19:10:53 · 273 阅读 · 0 评论 -
算法分析:斐波那契数列
目录前言第一种解法:迭代法第二种方法:递归法总结前言这道题就是找出这个数列的第 n 个节点,而这个数列有个特地点就是第 n 个数字 = n-1 + n-2 两个数字之和,所以我们一般这种有两种解法,递归和迭代题目地址:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/第一种解法:迭代法看到这种一个数等于前两个数之和的题目,第一个想法就需要存储以前的数字,一般都是用数组第一步,创建一个数组第二步,给前两个数组复制0 和原创 2021-06-29 11:33:33 · 352 阅读 · 0 评论 -
算法分析:两数之和(有序数组)
目录前言第一种解法:二分查找第二种解法:双指针总结前言这道题主要考察的是二分查找和双指针的算法,因为从有序的数组中找到一个数的两个因子就是搜索问题,一般这种问题都是用这两种方法比较好题目地址:https://leetcode-cn.com/problems/two-sum-ii-input-array-is-sorted/第一种解法:二分查找这一个解法我觉得太麻烦,并且双指针明显更好,但是学习不是只为了解决问题,多学一点也是为了以后碰到不一样的问题有更好的想法。第一步我先假设第一是因子,原创 2021-06-29 10:52:03 · 455 阅读 · 0 评论 -
算法分析:三个数的最大乘积
目录前言第一种解法:先排序再找第二种解法:线性布局总结前言这题太简单了,就是从数组里找出三个数乘积最大项目网址:https://leetcode-cn.com/problems/maximum-product-of-three-numbers/第一种解法:先排序再找这个题目一般两种情况,一种是有负数,一种是没负数,先说没有负数的,很简单,就直接排序把后面三个乘起来,有负数,就要看,是一个负数还是两个负数还是多个负数,反正负数的乘积就是越小越好,因为排好序了,如果是负数就一定在前面,所以把前原创 2021-06-28 17:50:21 · 465 阅读 · 0 评论 -
算法分析:寻找数组的中心下标
前言题目网址:https://leetcode-cn.com/problems/find-pivot-index/submissions/解法这道题很简单,意思就是一个数组分成两个部分,左边的部分和大于右边的部分和,找出这个界限,当然还有个问题可能界限在数组两边,例子里有写。一开始我的想法收到的双指针的影响,想要在左右两边都设置一个指针然后开始累加,后面想想有界限在数组两端这种情况就很麻烦。然后通过题解,我理解了这个解法第一步,首先将数组都加起来,设置为sum第二步,原创 2021-06-24 18:43:28 · 110 阅读 · 0 评论 -
算法分析:删除排序数组中的重复项
前言这是一道运用到双指针的经典题目,双指针我一直用的不太好,通过这道题巩固一下基础题目网址:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/submissions/双指针解法这道题的暴力解法我都不想说了,就是遍历一遍然后将数组中重复的删除,但是你要循环两次并且你还要消耗大量的空间,所以我们需要想到其他的办法,就用一次循环解决首先有个前提,只是一个有序数组,意思是他已将把数组排好序了,这就简单了,那重复原创 2021-06-24 14:39:07 · 158 阅读 · 0 评论 -
算法分析:统计素数
前言第一种方法这道题最简单的方法就是暴力解法,很简单,就是从 1 到 n 一个一个判断,然后把结果返回,不多说了直接上代码第二种方法这次我是长见识了,学习到一种新的方法埃氏筛选法,这个方法就是利用了素数和非素数的特性,非素数的特性就是可以因式分解,所以我们就要利用这个特点,通过前期像 2X3 2x4 2x5 等等这种小的来排除非素数。也就是通过空间换时间的做法,来提升性能。这个方法还能优化,就是...原创 2021-06-22 22:24:36 · 248 阅读 · 2 评论 -
算法解析:链表反转
目录提要题目第一种解法 迭代第二种解法 递归提要链表反转是一个非常经典的题目,属于比较简单的链表题目,其主要是为了利用链表的特性进行解题,本来我觉得挺简单的,但是我自己上手写的时候发现,有点绕写的有点慢,说明这一块还是不够熟练,网上有两种解题方法,既然要学习就要学习的透彻,所以我就把我自己学习的过程记录下来题目这道题目LeetCode上就有,就是剑指offer24题,题目截图我放在下面,网址我也放在下面网址:https://leetcode-cn.com/problems/fan-zhuan-l原创 2021-06-21 22:24:47 · 121 阅读 · 0 评论