
算法
文章平均质量分 89
从基础到进阶 这个专栏将会系统的介绍校招难度之内的算法知识
学习同学
搞学术不叫我是吧
展开
-
【C++ 算法进阶】算法提升二十四
现在给定你一个字符串s2 现在请问字符串s1中是否有一个子串包含s2 如果有 返回其中最小的一个子串。第一刀的位置我们是无法确定的 只能一个个尝试 但是确定了第一刀的位置之后 后续的位置就相对确定下来了。我们可以使用一个map来记录s2中字符出现的次数 使用一个变量all来记录滑动窗口区间的欠账。我们可以先将整个数组排序 然后求出前面每个数字能组成的数据对是多少 (其实就是数组的长度)给定一个数组arr 数组是无序的 数组中每两个数字都可以两两组成一个数据对。时间复杂度为N * LogN。原创 2024-11-28 11:21:16 · 488 阅读 · 0 评论 -
【C++ 算法进阶】算法提升二十三
我们可以设置一张哈希表 每当哈希表不为空或者候选数目存在哈希表中的时候 我们可以将此数添加到哈希表中或者让此数的血量加一。我们注意到水王的一个明显特征 如果这个数是水王 哪怕其他所有数一对一和水王数同归于尽 那么最终剩下的也肯定是水王数。超级水王问题:给你一个数组,出现次数大于数组长度的一半的元素称之为水王数,怎么能快速找到水王数?现在让你将这个数组分为左右两个数组 请问这两个数组中的最大值相减的绝对值最大是多少。一个数组 假设排序后是依次递增1的 我们就可以将这个数组称之为可整合数组。原创 2024-11-25 09:50:43 · 574 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十七
假设我们现在给定一个数字K 根据题目一的思路 从右上角开始找我们很轻松就能找到有多少个数小于K 并且能找到小于等于K且最接近K的数字是什么。如果说我们能找出小于等于M 并且距离M最接近的数字是多少 那么我们通过不断的二分 就可以找到数组中第K小的数。假设没有重复的字符的话 我们每次添加新字符时就相当于将原来的所有集合再乘以2 就能得到新加字符后的总集合。我们假设一个普遍位置的 dp[i][j] i表示字符串s0~i位置 j表示字符串t的0到j位置。此时我们要求的是dp[I-1][J-1]原创 2024-11-17 17:03:41 · 616 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十六
据说著名犹太历史学家Josephus(弗拉维奥·约瑟夫斯)有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。假设range大于的range + 1的话 我们就无法组成range + 1这个数。假设现在有一个正数数组 这个正数数组中有1这个数。如果数组的长度很大 此题应该如何解?原创 2024-11-17 12:46:39 · 1550 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十五
本题为LC原题 题目如下。原创 2024-11-16 15:07:57 · 486 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十四
需要注意的是 我们这里的期望数字是会有一个最大结果的 这个最大结果就是这个数组中所有数都是正整数并且是 0 1 2 …给定你一个数组 这个数组中的数可能有正数负数和零 现在要求你求出在这个数组中 确实的最小正整数。而恰巧 我们可以用右数组的边界来表示期望数字的最大结果 每次右数组往左扩的时候这个结果都减小。我们设置一个数组dp dp[i]的含义是 以i位置结尾的时候有效括号的数目是多少。本题其实就是利用了二叉搜索树的性质 就是中序遍历的话 遍历出来的结果是有序的。那么缺失的最小正整数就是1。原创 2024-11-11 10:15:08 · 802 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十三
每台洗衣机内存放着的衣服不固定 现在可以从左到右移动 每次移动每台洗衣机可以将一件衣服向左或者向右移动。又比如 左边少了12件 右边也少了12件 这说明都集中在当前位置了 那么就需要12 + 12轮才能平分。二是根据题目找信息 题目中给出了三种范围 那么我们肯定可以很自然的想到这三种范围代表什么呢?假设现在有1~N N张牌 每张牌的序号就代表着他的大小 (1 2 …题目为 有N台洗衣机 有 X件衣服在各个洗衣机内 现在要求洗衣机平分衣服。这是谷歌的一道面试题 实际上是一道非常简单的动态规划题目。原创 2024-11-10 20:52:51 · 1458 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十一 十二
假设我们现在想要的第一个数字是2 那么当2来到之后只需要和3 头尾相连 我们打印整个单链表就能得到我们想要的结果了 (当然我们要记得处理下头尾表数据)我们可以在哈希表中 统计aim每个字符的个数 在第一次形成窗口的时候让这些字符的个数减去窗口中字符的个数 (可以小于0)只有当字符串的i j位置相同的时候我们可以使用这一项 dp[i][j] = dp[i+1][j-1]我们要打印的是一个连续的区间 所以说等数据到了之后让其跟我们现在需要的数据对比的方式肯定不可行。那我们想想看 怎么才能让一段数据连续呢?原创 2024-11-10 14:11:16 · 996 阅读 · 0 评论 -
【C++ 算法进阶】算法提升十
显然是可以的 知道左右两个区间的运算结果之后 我们只需要结合中间的split运算符 就可以算出最终的答案了。这样分主要原因是后面dp[i][j] = dp[i-1][j] +dp[i-1][j-1]+…要想知道跳跃的最小次数 我们则需要遍历整个数组 这里我们可以使用三个变量来找出最终的答案。所以说我们可以建立这样子的一个dp表 dp[i][j] = 数字i有k个逆序对的数目。我们遍历整个数组的时候只需要不断的更新这三个值就能得到最终答案了。接下来我们就可以推dp[i][j]的普遍方式了。原创 2024-11-04 09:19:50 · 998 阅读 · 0 评论 -
【C++ 算法进阶】算法提升八
给定一个字符串str str表示一个公式 公式里面可能有整数 + - * / 符号以及左右括号 返回最终计算的结果。原创 2024-10-31 21:42:09 · 986 阅读 · 0 评论 -
【C++ 算法进阶】算法提升七
但是这种方法的时间复杂度显然是过高的 因为每次拼接字符串的时候我们都需要遍历整个数组 导致了很多无用的遍历 (我们只需要遍历set中有的就行了)也就是说 如果我们当前位是0 走0号线 1号线都是有理由的 但是我们无法比较0和1号线下面谁更好 所以说前缀树的方式是行不通的。这个时候我们只需要用一个map来记录下各个单词可能走的路径 并且继续下各个单词可能的节点 就能极大的优化查找字符串的效率。这道题和算法提升六中的异或有着明显的不同 因为在&运算中 只要有一个数是0 最后的结果就是0。原创 2024-10-25 13:31:07 · 1019 阅读 · 0 评论 -
【C++ 算法进阶】算法提升六
求出一个数组中最大的子数组异或和。原创 2024-10-24 17:03:33 · 604 阅读 · 0 评论 -
【C++ 算法进阶】算法提升五
本题为LC原题目 题目如下。原创 2024-10-21 17:33:49 · 478 阅读 · 0 评论 -
【C++ 算法进阶】算法提升四
数组为 {3 , 2, 2 ,3 ,1} 查询为(0 ,3 ,2)这个查询的意义是 在数组下标0~3这个范围上 有多少个2 (答案为2)假设现在给你一个数组arr 假设我们对于这个数组的查询十分频繁现在要求你返回所有的查询结果。原创 2024-10-19 19:52:40 · 731 阅读 · 0 评论 -
【C++ 算法进阶】算法提升三
给定三个参数 :二叉树的头结点Hrad 树上某个节点targert 正数K从target开始 可以向上或者向下走返回与target的距离为K的所有节点。原创 2024-10-17 09:50:42 · 871 阅读 · 0 评论 -
【C++ 算法进阶】算法提升二
解决了几道常见的算法题原创 2024-10-14 18:37:25 · 934 阅读 · 0 评论 -
【Hello Algorithm】单调栈(未完待续)
单调栈数据结构及相关问题(一部分 待更新)原创 2023-11-14 16:41:05 · 573 阅读 · 0 评论 -
【Hello Algorithm】贪心算法
贪心算法是一种极具有自然智慧的算法它会使用以一种局部最功利的标准来做出一个当前看来最好的选择如果说我们根据局部最优解算出了全局最优解 那么这就是一个有效的贪心反之我们就可以说 这是一个无效的贪心也就是说 我们用贪心算法做题是可能出错的!贪心算法的难点在于 我们如何使用局部最功利的标准去得到全局最优解所以说贪心算法并没有一套很固定的模板 对于贪心算法的学习我们只能是增加阅历和经验为主下面是贪心算法的反例。原创 2025-04-18 11:05:35 · 697 阅读 · 0 评论 -
【Hello Algorithm】滑动窗口内最大值最小值
滑动窗口是一种我们想象中的数据结构 它是用来解决算法问题的我们可以想象出一个数组 然后再在这个数组的起始位置想象出两个指针 L 和 R我们对于这两个指针做出以下规定L 和 R指针只能往右移动L指针不能走到R指针的右边我们只能看到L指针和R指针中间的数字比如说当前L和R指针重合 我们就什么数字都看不见如果此时R指针往右走一步 那么我们就能看到L指针和R指针中间的数组的数字又因为这种移动的方式特别像滑动 所以说我们将这种想象出来的数据结构叫做滑动窗口。原创 2023-10-28 18:07:42 · 465 阅读 · 0 评论 -
【Hello Algorithm】 暴力递归到动态规划 -- 总结
动态规划总结原创 2023-10-26 10:15:40 · 145 阅读 · 0 评论 -
【Hello Algorithm】暴力递归到动态规划(五)
暴力递归和动态规划原创 2023-10-22 16:54:06 · 185 阅读 · 0 评论 -
【Hello Algorithm】暴力递归到动态规划(四)
从暴力递归到动态规划四原创 2023-10-16 10:35:19 · 455 阅读 · 0 评论 -
【Hello Algorithm】暴力递归到动态规划(三)
从暴力递归到动态规划三原创 2023-10-15 16:51:04 · 444 阅读 · 0 评论 -
【Hello Algorithm】暴力递归到动态规划(二)
暴力递归到动态规划二原创 2023-10-11 15:24:22 · 499 阅读 · 0 评论 -
【Hello Algorithm】暴力递归到动态规划(一)
从暴力递归到动态规划一原创 2023-10-09 19:08:33 · 393 阅读 · 0 评论 -
【Hello Algorithm】认识一些简单的递归
一些简单的递归函数原创 2023-10-06 20:40:56 · 788 阅读 · 0 评论 -
【Hello Algorithm】贪心算法
简单介绍几道贪心算法的题目原创 2023-09-08 17:07:15 · 874 阅读 · 0 评论 -
【Hello Algorithm】二叉树的递归套路
介绍树形dp相关算法原创 2023-09-06 18:35:34 · 201 阅读 · 0 评论 -
【Hello Algorithm】二叉树相关算法
介绍了二叉树的相关算法原创 2023-09-04 11:35:25 · 495 阅读 · 0 评论 -
【Hello Algorithm】链表相关算法题
链表相关算法题原创 2023-09-01 03:34:59 · 379 阅读 · 0 评论 -
【Hello Algorithm】最大线段重合及加强堆
最大线段重合和介绍加强堆原创 2023-08-28 22:08:07 · 282 阅读 · 0 评论 -
【Hello Algorithm】堆和堆排序
介绍堆和堆排序原创 2023-08-25 22:41:01 · 284 阅读 · 1 评论 -
【Hello Algorithm】归并排序及其面试题
介绍归并排序以及归并排序能够解决的几道面试题原创 2023-05-14 17:48:45 · 840 阅读 · 2 评论 -
【Hello Algorithm】基础数据结构
简单介绍下基础的数据结构原创 2023-05-12 17:11:46 · 776 阅读 · 0 评论 -
【Hello Algorithm】异或法
介绍了异或法原创 2023-05-10 15:39:30 · 790 阅读 · 6 评论 -
【Hello Algorithm】复杂度 二分法
介绍算法的复杂度 对数器和二分法原创 2023-05-03 11:13:11 · 555 阅读 · 6 评论