拉布拉多算法
Alex抱着爆米花
让技术更简单更有趣
展开
-
二叉树(序列化篇和后序篇)
如果你给出的是前序或者后序,那么你可以还原出唯一的一棵二叉树。如果你给出的是中序,那么除非你的整棵树中不包含值相同的节点,否则你无法还原出唯一的一棵二叉树。原创 2023-05-23 09:25:24 · 74 阅读 · 0 评论 -
搞懂,就再也不用怕数组去重问题
要求一、要去重。要求二、去重字符串中的字符顺序不能打乱 s 中字符出现的相对顺序。要求三、在所有符合上一条要求的去重字符串中,字典序最小的作为最终结果。要利用数据结构来满足上述三个条件,具体思路如下:通过做到栈中不存在重复元素,满足要求一。我们顺序遍历字符串 s,通过「」这种顺序结构的 push/pop 操作记录结果字符串,保证了字符出现的顺序和 s 中出现的顺序一致,满足要求二。用类似单调栈的思路,配合不断 pop 掉不符合最小字典序的字符,保证了最终得到的结果字典序最小,满足要求三。原创 2023-05-22 02:15:00 · 42 阅读 · 0 评论 -
二叉树(思路篇)
二叉树解题的思维模式分两类:1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。无论使用哪种思维模式,你都需要思考:如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。原创 2023-05-21 21:21:17 · 41 阅读 · 0 评论 -
二叉树(构造篇)
二叉树的构造问题一般都是使用「分解问题」的思路:构造整棵树 = 根节点 + 构造左子树 + 构造右子树。原创 2023-05-21 21:21:00 · 41 阅读 · 0 评论 -
常数时间删除-查找数组中的任意元素
结合哈希表和数组,使得数组的删除操作时间复杂度变成 O(1)对数组尾部进行插入和删除操作不会涉及数据搬移,时间复杂度是 O(1)。在 O(1) 的时间删除数组中的某一个元素 val,可以先把这个元素交换到数组的尾部,然后再 pop 掉。想高效地,等概率地随机获取元素,就要使用数组作为底层容器。原创 2023-05-21 01:00:00 · 42 阅读 · 0 评论 -
算法实现田忌赛马
将齐王和田忌的马按照战斗力进行排序,打得过(大于)就打,打不过(小于等于)就用自己的垃圾和对方的精锐互换。原创 2023-05-20 01:00:00 · 254 阅读 · 0 评论 -
按权重随机选择
通过前缀和技巧加上二分搜索能够解决带权重的随机选择算法。原创 2023-05-19 01:00:00 · 46 阅读 · 0 评论 -
算法技巧:字符匹配算法 - RABIN KARP 和 KMP
本质是滑动窗口计算字符串的hash值(会重复的,需要set进行去重),需要弄懂两个公式。Rabin Kapr 算法。原创 2023-05-18 01:00:00 · 100 阅读 · 0 评论 -
二分搜索帮我解决实际问题
二分搜索代码框架常应用于「在有序数组中搜索指定元素」这个基本场景,具体的实际问题可以没有那么直接,但是也可以使用二分搜索进行解决实际问题一般都让你求最值,比如让你求吃香蕉的「最小速度」,让你求轮船的「最低运载能力」,求最值的过程,必然是。原创 2023-05-17 01:00:00 · 235 阅读 · 0 评论 -
二维数组的花式遍历技巧
见过就会类型,纯技巧。原创 2023-05-16 01:00:00 · 45 阅读 · 0 评论 -
算法技巧:差分数组
差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减。diff[i] 就是 nums[i] 和 nums[i - 1]之差。原创 2023-05-15 01:00:00 · 54 阅读 · 0 评论 -
算法技巧:前缀和数组
前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。下面两道题目即为模板。原创 2023-05-15 01:00:00 · 35 阅读 · 0 评论 -
如何判断回文链表
找到中点的模板然后翻转,挨个判断。原创 2023-05-14 01:00:00 · 33 阅读 · 0 评论 -
一个技巧秒杀翻转链表
模板按照顺序拼接node,并可以递归处理。原创 2023-05-14 01:00:00 · 28 阅读 · 0 评论 -
一个套路解决NSUM 问题
nsum问题都是先排序后双指针去重的套路(忽略下标位置)原创 2023-05-13 01:00:00 · 151 阅读 · 0 评论 -
一个方法团灭 LEETCODE 打家劫舍问题
动态规划,抢劫和不抢劫。原创 2023-05-12 01:00:00 · 93 阅读 · 0 评论 -
一个方法团灭 LEETCODE 股票买卖问题
使用动态规划技巧团灭力扣股票买卖问题原创 2023-05-12 02:00:00 · 72 阅读 · 0 评论 -
一个模板让滑动窗口算法变成了默写题
滑动窗口算法的时间复杂度是O(N),指针不会回退(它们的值只增不减),所以字符串/数组中的每个元素都只会进入窗口一次,然后被移出窗口一次。原创 2023-05-11 02:00:00 · 40 阅读 · 0 评论 -
二分模板秒杀二分搜索题目
二分模板秒杀二分搜索题目原创 2023-05-10 02:00:00 · 632 阅读 · 0 评论 -
BFS 算法解题套路框架
BFS 的核心思想:把一些问题抽象成图,从一个点开始,向四周开始扩散。用「队列」这种数据结构,每次将一个节点周围的所有节点加入队列。BFS 相对 DFS (回溯算法)的最主要的区别是:BFS 找到的路径一定是最短的,但代价就是空间复杂度可能比 DFS 大很多。原创 2023-05-08 14:01:06 · 53 阅读 · 0 评论 -
回溯算法秒杀所有排列-组合-子集问题
这也是最基本的形式。以组合为例,如果输入 nums = [2,3,6,7],和为 7 的组合应该只有 [7]。,每个元素最多只能被使用一次。以组合为例,如果输入 nums = [2,5,2,1,2],和为 7 的组合应该有两种 [2,2,2,1] 和 [5,2]。以组合为例,如果输入 nums = [2,3,6,7],和为 7 的组合应该有两种 [2,2,3] 和 [7]。原创 2023-05-09 02:00:00 · 55 阅读 · 0 评论 -
回溯算法解题套路框架
回溯算法是在遍历「树枝」,DFS 算法是在遍历「节点」回溯算法框架,站在回溯树的一个节点上,只需要思考 3 个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件。原创 2023-05-08 02:00:00 · 30 阅读 · 0 评论 -
动态规划解题套路框架
思维框架,思考状态转移方程:明确 base case -> 明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义。原创 2023-05-05 14:26:15 · 71 阅读 · 0 评论 -
二叉树(纲领篇)
二叉树解题的思维模式分两类:1、是否可以通过遍历一遍二叉树得到答案?如果可以,用一个 traverse 函数配合外部变量来实现,这叫「遍历」的思维模式。2、是否可以定义一个递归函数,通过子问题(子树)的答案推导出原问题的答案?如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。无论使用哪种思维模式,你都需要思考:如果单独抽出一个二叉树节点,它需要做什么事情?需要在什么时候(前/中/后序位置)做?其他的节点不用你操心,递归函数会帮你在所有节点上执行相同的操作。原创 2023-05-06 02:00:00 · 607 阅读 · 0 评论 -
双指针技巧秒杀七道链表题目
【代码】双指针技巧秒杀七道链表题目。原创 2023-05-04 19:28:24 · 562 阅读 · 0 评论 -
双指针技巧秒杀七道数组题目
【代码】双指针技巧秒杀七道数组题目。原创 2023-05-04 19:22:41 · 24 阅读 · 0 评论