算法
文章平均质量分 80
el psy congroo
为世界上所有的美好而战
展开
-
牛客网题目--哈夫曼树
关于哈夫曼编码与哈夫曼树的介绍,可以看。以3,4,5,6为例构造哈夫曼树。原创 2024-06-02 20:22:19 · 267 阅读 · 1 评论 -
奇数位丢弃
所以只要找到最后一个删除的数就好了。原创 2024-05-30 21:17:41 · 621 阅读 · 0 评论 -
跳台阶扩展问题
所以 f(n) = 2。原创 2024-05-28 22:16:19 · 318 阅读 · 0 评论 -
BFS算法--宽度优先搜索(广度优先搜索)
文章目录树N叉树的层序遍历二叉树的锯齿形层序遍历二叉树最大宽度在每个树行中找最大值FloodFill算法图像渲染岛屿数量岛屿的最大面积被围绕的区域最短路径问题迷宫中离入口最近的出口最小基因变化单词接龙为高尔夫比赛砍树多源BFS矩阵飞地的数量地图中的最高点地图分析拓扑排序(核心与多源BFS一样)课程表课程表II火星词典树N叉树的层序遍历class Solution { public List<List<Integer>> levelOrder(Node root) {原创 2024-04-09 12:08:14 · 329 阅读 · 0 评论 -
字符串相关算法
整体思路就是模拟列竖式计算两个数相乘的过程。但是为了书写代码的方便性,我们选择优化的版本,就是在计算两数相乘的时候,先不考虑进位,等到所有结果计算完毕之后,再去考虑进位。原创 2024-04-02 12:07:54 · 404 阅读 · 0 评论 -
分治-算法
与逆序对的问题不同的是,逆序对我们可以⼀边合并⼀边计算,但是这道题要求的是左边元素大于右边元素的两倍,如果我们直接合并的话,是⽆法快速计算出翻转对的数量的。因此,我们可以利⽤归并排序的过程,先求出左数组中逆序对的数量,再求出右数组中逆序对的数量,最后求出⼀个选择左边,另⼀个选择右边的逆序对的数量,三者相加即可。这道题的解法与 求数组中的逆序对 的解法是类似的,但是这道题要求的不是求总的个数,而是要返回⼀个数组,记录每⼀个元素的右边有多少个元素比自己小。在归并排序合并的过程中,我们得到的是两个有序的数组。原创 2024-03-28 14:05:20 · 933 阅读 · 0 评论 -
模拟-算法
定义的哈希表hash记录蛙叫次数,除了’k’其他字符会被下一个字符消掉,'k’只有在新增’c’的时候消掉,最后留下多少’k’就是几只蛙。第一行、第二行第⼀个数取值为行数,第二个数夹在等差数列中间, 就是第零行的等差数列第二个数减去行数。不难发现,第零行和最后一行的数据是以 2numRows - 2 为公差递增的等差数列。所谓「外观数列」,其实只是依次统计字符串中连续且相同的字符的个数。依照题意,依次模拟即。ii. 如果差值小于中毒时间,那么上次的中毒只能持续两者的差值。以此规律,我们可以写出迭代算法。原创 2024-03-23 10:28:18 · 744 阅读 · 2 评论 -
位运算算法
由于整个数组中,需要找的元素只出现了「⼀次」,其余的数都出现了「三次」,因此我们可以根据所有数的「某⼀个比特位」的总和 %3 的结果,快速定位到 ret 那位「比特位」的值是0 还是 1。利用「位图」的思想,每⼀个「比特位」代表⼀个字符,⼀个 int 类型的变量有 32 位足够表示所有的小写字⺟。如果我们把数组中的数,以及 [0, n] 中的数全部「异或」在⼀起,那么根据「异或」运算的两个相同的数异或的结果一定为0,最终的异或结果就是缺失的数。给一个数n,确定它的二进制表示中的第x位是0还是1。原创 2024-03-21 15:39:18 · 401 阅读 · 0 评论 -
前缀和算法
前缀和可以快速求出数组中某个连续区间的和为了处理边界情况,下标从1开始dp[i]表示原数组[ 1 , i ]区间内所有元素之和dp[i]=dp[i-1]+原数组[i]原创 2024-03-20 18:19:13 · 805 阅读 · 0 评论 -
二分查找算法
大家⼀定不要觉得背下模板就能解决所有二分问题。二分问题最重要的就是要分析题意,然后确定要搜索的区间,根据分析来写出二分查找算法的代码。要分析题意,确定搜索区间,不要死记模板,不要看左闭右开什么乱七⼋糟的题解要分析题意,确定搜索区间,不要死记模板,不要看左闭右开什么乱七⼋糟的题解要分析题意,确定搜索区间,不要死记模板,不要看左闭右开什么乱七⼋糟的题解重要的事情说三遍。原创 2024-03-18 12:23:45 · 756 阅读 · 0 评论 -
滑动窗口算法
因为字符串 p 的异位词的长度⼀定与字符串 p 的长度相同,所以我们可以在字符串 s 中构造⼀个长度与字符串 p 相同的滑动窗口,并在滑动中维护窗口中字母的数量。可以用两个大小为 26 的数组来模拟哈希表(全是小写字母),⼀个来保存 s 中的子串每个字符出现的个数,另⼀个来保存 p 中每⼀个字符出现的个数。既然是连续区间,可以考虑使用「滑动窗口」来解决问题。题目要求的是数组「左端+右端」两段连续的、和为 x 的最短数组,我们可以转化成求数组内⼀段连续的、和为 sum(nums) - x 的最长数组。原创 2024-03-14 15:09:30 · 836 阅读 · 0 评论 -
双指针算法
而「快慢指针」有⼀个特性,就是在⼀个圆圈(循环)中,快指针总是会追上慢指针,也就是说速度相差一个元素时他们总会相遇在同⼀个位置。设两个指针 left , right 分别指向容器的左右端点,容器的左边界为 height[left] ,右边界为 height[right]。快慢指针的实现方式有很多种,最常用的⼀种就是:在⼀次循环中,每次让慢的指针向后移动⼀位,而快的指针往后移动两位,实现⼀快⼀慢。由于上述两种情况只会出现⼀种,因此,只要我们能确定死循环是「情况⼀」,还是「情况⼆」,就能得到结果。原创 2024-03-12 11:41:50 · 831 阅读 · 0 评论 -
七大排序算法
快速排序整体的综合性能和使用场景都是比较好的,所以才叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定。原创 2024-03-02 20:48:10 · 959 阅读 · 0 评论 -
KMP算法
KMP 和 BF 不一样的地方在,主串的的下标 i 并不会回退,只需要让子串的下标 j 回退就够了(通过一个next数组找到回退的位置)原创 2023-12-22 22:28:19 · 896 阅读 · 0 评论