算法集锦
文章平均质量分 75
。
看,未来
墨家学徒
展开
-
大数据中判断一个数据存在
那天晚上,越黑风高,我的好朋友跟我说面试官问了他这么一个问题:现在有一千万个IP,你要怎么查询一个IP是否存在?二话不说,map-reduce,是没错的。因为他没说这种操作要持续多少次啊,这一千万个IP要不要做持久化啊。那现在问题加码一下,要频繁查询。这个场景似曾相识是不是,有没有。在redis缓存击穿的时候,遇到恶意攻击怎么办?布隆过滤器:判断一个数据存在,数据可能存在。判断一个数据不存在,那肯定不存在。但是我们现在是要判断绝对存在或不存在。这可咋整?数据结构(12)-- 前缀树(字典树原创 2021-10-15 22:02:01 · 565 阅读 · 0 评论 -
O(n)复杂度解决两数和问题
哈希表原创 2021-10-02 16:51:41 · 381 阅读 · 0 评论 -
二叉树类问题框架
文章目录前言解决方案应用示例二叉树最大路径和前、中序遍历还原二叉树判断两棵二叉树完全相同判断BST的合法性BST 遍历框架完全二叉树的节点数量二叉树节点公共祖先问题前言花些时间,把这段时间刷的题目分门别类的记录一下基础框架,留待后来人。每个人的路不同,对我来说,不见得要把大部分时间投入到算法当中,我还是更喜欢系统框架搭建以及底层原理这种大开大合的功法吧。系列开头先来个最简单的二叉树,使用此框架的前提是:你能把实际问题抽象成为二叉树问题。题目也好,现实问题也罢,都是会有“伪装”的。解决方案vo.原创 2021-09-29 16:41:18 · 405 阅读 · 0 评论 -
算法集锦 -- 导航篇
文章目录算法集锦 部分LeetCode精选好题 部分其他算法题算法集锦 部分算法集锦(1):八大排序算法 :GIF + 亲测代码 +专项练习平台算法集锦(2):递归精讲算法集锦(3):回溯,从入门到入土,七道试题精选、精讲、精练算法集锦(4):给人看的动态规划算法集锦(5):BFS算法算法集锦(6):快慢指针算法集锦(7):滑动窗口算法集锦(8):从两数和问题拓展到一百数和问题算法集锦(9):背包问题算法集锦(10):通俗讲kmp算法算法集锦(11):敏感词过滤算法(DFA)算法.原创 2021-02-28 11:19:31 · 3696 阅读 · 12 评论 -
【C++】算法集锦(14):贪心算法
文章目录贪心算法跳跃游戏 I思路分析代码实现跳跃游戏 II思路贪心算法贪心算法可以理解为一种特殊的动态规划为题,拥有一些更加特殊的性质,可以进一步降低动态规划算法的时间复杂度。来看几道题目熟悉一下这种“不断寻求局部最优”的算法。跳跃游戏 I输入一个非负整数数组nums,数组元素nums[i]表示的是:如果你站在位置 i ,最多能够往前跳几步。现在你站在第一个位置nums[0],试问你能否跳到数组的最后一个位置?例:[1,2,3,4,5],可以[1,2,0,0,4],不行思路分析这题.原创 2021-02-26 20:53:14 · 3593 阅读 · 6 评论 -
【C++】算法集锦(13):最长递增子序列
最长连续序列(困难)给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-consecutive-sequence著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路用哈希集合(h.原创 2021-02-26 15:37:41 · 3318 阅读 · 10 评论 -
【C++】算法集锦(12):高楼扔鸡蛋
文章目录题目描述题目分析(我的想法)题目再分析题目描述我有一箩筐的鸡蛋,我可以给你两个。我有一栋一百层的楼,我想让你站在第一百层,以最少的次数帮我测出来鸡蛋最多扔到哪一层不会碎。你放心扔,如果没碎,不用去捡,我直接补给你一个。事成之后,这张支票你随便填。_佰_拾_圆题目分析(我的想法)咋样,有什么想法吗?我说说我的想法,首先,第二个鸡蛋肯定一层一层扔啊(不是两层两层扔)。那第一个鸡蛋呢?我是这么想的啊,土是土了点,但我觉得很有效。1、肯定不能·一层一层扔2、如果两层两层扔,最.原创 2021-02-25 22:57:07 · 2896 阅读 · 15 评论 -
【C++】算法集锦(11):敏感词过滤算法(DFA)
文章目录什么是 确定的、有穷状态、机跟我一起看个栗子DFA图解DFA示例实现代码DFA:确定的 有穷 状态机如果 设计模式 中的状态模式比较熟的话,这个就很清楚了。DFA常用于敏感词过滤。什么是 确定的、有穷状态、机啊,看这个名字,就通俗易懂了嘛。首先它是个机,干嘛用的机我说一下:模式串筛选用的机。常用于从复杂的字符串中筛选有效信息,可以是敏感词啊、词法编辑(编译器使用)等方面。当然,这是常用,别人这么用。它这个功能特性啊,我很喜欢。确定、有穷状态,能想到什么?图,流程图!再细想,什么.原创 2021-02-24 19:58:50 · 2060 阅读 · 13 评论 -
【C++】算法集锦(10)通俗讲kmp算法
什么是KMP算法它是一个字符串匹配算法。KMP算法的优势(就恨当初写kmp那篇的时候,没有留下图解,全篇文字铺开,现在我自己都看不懂了)首先,给定 “主串” 和 “模式串” 如下:BF算法使用简单粗暴的方式,对主串和模式串进行逐个字符的比较:第二轮,模式串向后挪动一位,和主串的第二个等长子串比较,发现第0位字符不一致:第三轮,模式串继续向后挪动一位,和主串的第三个等长子串比较,发现第0位字符不一致:······这种算法的缺点很明显,做了很多无谓的比较,还好,我们今天讲的不..原创 2021-02-24 16:12:38 · 1558 阅读 · 14 评论 -
【C++】算法集锦(9):背包问题
文章目录0-1背包问题动态规划标准套路伪代码修缮代码子集背包问题思路分析代码实现完全背包问题本来要拿《背包九讲》作为参考的,奈何太抽象,我看不懂0-1背包问题给你一个载重量为 W 的背包,以及一堆物品,这些物品都有属于自己的两个属性:价值var和质量wt,试问这个背包最多能装多少价值的物品。这里面的每一个物品,要么装,要么不装。看到这个图,第一反应是不是:性价比比一下。如果是这样想的朋友可以停下来了,性价比不行。如果只有两个物品,一个4Kg,值8¥;一个15Kg,值10¥;很明显前面那个性价比.原创 2021-02-23 20:46:02 · 1574 阅读 · 13 评论 -
【C++】算法集锦(8):从两数和问题拓展到一百数和问题
文章目录2sum问题3sum问题Nsum问题2sum问题给定一个数组,以及一个数,从数组里随即找两个数加起来等于给定的那个数。找出每组符合条件的数(不可重复)。这表述没有问题吧。那,这样的题目该怎么实现呢?如果看过上一篇,的上一篇的小伙伴应该很快就能想到用双指针吧(其实那篇我就想写这个了,但是想了想,还是憋住了)这里有两个地方要注意:1、数组要有序2、跳过同类项然后,就没什么难度了吧,我把伪代码写一下:def two_sum(sum,nums): ret = [] sz = le.原创 2021-02-23 15:11:44 · 1962 阅读 · 19 评论 -
【C++】算法集锦(7)滑动窗口
文章目录从LeetCode上的一道题说起无重复字符的最长子串思路:代码实现:无重复字符的最长子串思路:代码实现:从LeetCode上的一道题说起给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例: 输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。看到这个题,我不知道大家是怎么想的,我想到的就是暴力解法.原创 2021-02-22 20:45:12 · 2034 阅读 · 10 评论 -
【C++】算法集锦(6):快慢指针
文章目录双指针解法快排链表成环判断链表是否有环寻找链表入环点合并K个有序链表(困难)思路:代码实现:寻找链表中的倒数第K个元素双指针解法这是我很喜欢的一个解法,从我第一眼看到它就很喜欢了。什么时候会用到双指针呢?但凡可以出现两条或者更多序列的时候,就可以用这种方法了。注意,我说的是:可以出现。有条件要上,没有条件创造条件也要上。直接上例子吧,这算法太常见了。快排双边遍历首先啊,确定基准为4,左指针指向第一个元素,右指针指向尾巴。右指针开始,向前遍历,找到第一个大于基准的元素就停下,.原创 2021-02-22 19:22:45 · 3429 阅读 · 14 评论 -
【C++】算法集锦(5):BFS算法
文章目录BFS算法框架框架代码简单题:二叉树的最小高度拔高题:解开密码锁的最少次数一波优化:双向BFSBFS算法框架BFS算法和DFS算法属于图论算法的范畴,DFS在前面回溯中,可以去看一下。BFS算法用于寻找两点之间的最短路径。碧如说:寻找树的最小高度(迭代法)、走迷宫、导航等问题。这些问题看起来都会比较抽象,去做也是很抽象。与其说算法框架难写,倒不如说是把实际问题转化为算法问题来的要难。还记得我在图论算法那篇里面有讲过:学习图论算法,最难的是要有用图论算法的意识。等下看了例题就知道了。.原创 2021-02-21 14:57:28 · 3379 阅读 · 12 评论 -
【C++】算法集锦(4):给人看的动态规划
文章目录动态规划动态规划动态规划问题,它不叫动态规划算法,因为它不是一种算法,它是一众类型的问题的统称。我们前面两篇的“递归算法”、“回溯算法”,以及接下来会讲的“贪心算法”等都属于动态规划的范畴。所以这一篇是会持续翻新的,每写一种相关文章,都会在这里呈现出来。那么,到底什么是动态规划呢?在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态.原创 2021-02-20 14:57:43 · 3591 阅读 · 16 评论 -
【C++】八皇后问题(竖列递进)
文章目录什么是八皇后问题?图示解法之一测试结果其他解法什么是八皇后问题?八皇后问题是一个古老的问题,于1848年由一位国际象棋棋手提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,如何求解?图示像这样的。解法之一#include<iostream>using namespace std;#define MAX_NUM 8 //皇后数量int queen[MAX_NUM][MAX_NUM] = { 0 }原创 2020-07-28 16:38:27 · 1867 阅读 · 10 评论 -
【C++】算法集锦(3):回溯,从入门到入土,七道试题精选、精讲、精练
文章目录前言递归N叉树的遍历节点设计N叉树的前序遍历后序遍历层序遍历回溯例题精讲岛屿最大面积思路代码实现八皇后问题思路代码实现括号生成思路代码实现全排列思路代码实现再说两句解回溯题的一般步骤电话号码的字母组合思路代码实现子集思路代码实现前言回溯算法,之前也是写过的,感觉还不错。但是之前分成两篇写了,现在重新整理一下,顺便我自己也回顾一下。递归要玩得转回溯算法,递归思想就要融入骨子里。正好早上我整理了一篇递归相关的,不妨看一下:【C++】算法集锦(2):递归N叉树的遍历我们从N叉树的遍历入手,.原创 2021-02-19 15:20:10 · 2422 阅读 · 13 评论 -
【C++】算法集锦(2):递归精讲
文章目录前言从“楼梯事件”说起解决方案自下而上记忆化代码实现递归的解题步骤递归精练1、打印杨辉三角的第k行代码实现:2、合并两个有序链表代码实现:3、快速排序双边遍历单边遍历双边循环代码实现2、单边循环代码实现前言之前是写过一篇“递归”的博客,但是感觉有点水,例题没有给到位,细节也没有点明白,所以今天再写一遍,前面那篇就删了吧。从“楼梯事件”说起在这个古老的国度,流传着一个经久不衰的问题:爬楼梯问题。在你面前,有N层楼梯,对于你来说,一次只能爬一层或两层楼梯。试问,你知道自己有多少种不同的方法.原创 2021-02-19 11:46:27 · 3720 阅读 · 18 评论 -
【C++】算法集锦(1):八大排序算法 :GIF + 亲测代码 +专项练习平台
主要目的呢,是为了我自己记住。这篇写完,以前那几篇排序的博客都可以删了。五天之后就设为粉丝可见啦。文章目录1、八大排序总览代码实现一律放到文末,方便有兴趣边看边练的小伙伴动手自己写。2、冒泡排序3、快速排序4、插入排序5、希尔排序6、选择排序7、堆排序8、归并排序9、基数排序冒泡排序代码实现快速排序代码实现插入排序代码实现希尔排序代码实现选择排序代码实现归并排序基数排序练习平台1、八大排序总览比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称.原创 2020-07-08 17:29:34 · 6651 阅读 · 110 评论