leetcode分类刷题
文章平均质量分 65
定个小目标:50篇+200道
22世纪冲刺
过有意义的人生,走不寻常的道路;而且,活着,活着真好。
展开
-
leetcode&lintcode分类刷题:图论(三、多源最小距离问题)
1、本次总结的题目通常是多个源头节点分别求解到达目标节点的最小距离,目标节点可能为多个,也可能为一个;要采用广度优先搜索的方法,但先提前入队的不是源头节点了,而是目标节点,由目标节点为基准一圈一圈的更新能够达到的“新目标”位置,每一圈更新能够达到的位置最多只会访问一次2、常见的题型会设置障碍物,在一些细节的特殊情况上,需要稍微注意下:源头节点&目标节点都不存在或其中一个不存在的情况,距离标记采用同尺寸的距离矩阵3、有的题目比较难一点,会求解多个源头节点到所有目标节点距离之和的最小值原创 2023-09-18 11:49:30 · 580 阅读 · 0 评论 -
leetcode&lintcode分类刷题:图论(二、单源最小距离问题)
1、本次总结的题目通常采用广度优先搜索的方法,由于是求单个源头节点到达目标节点的最小距离,因此,按照广度优先搜索的方法一圈一圈的更新能够达到的位置,然后判断位置中是否有目标节点,每一圈更新能够达到的位置最多只会访问一次2、常见的题型会设置障碍物、距离更新的规则,稍微复杂点的题目会增加传送门、设置最多可通过几个障碍物等,因此,在一些细节的特殊情况上,需要稍微注意下:源头节点或目标节点本身处在障碍物位置(无法到达)、源头节点和目标节点位置相同(最小距离为0)原创 2023-09-18 11:32:12 · 135 阅读 · 0 评论 -
leetcode&lintcode分类刷题:图论(一、连通域/岛屿问题)
1、本次总结的题目通常是在二维矩阵考察连通域/岛屿问题,常用的方法包括深度优先搜索、广度优先搜索和并查集,根据具体的题目可以选择最合适的方法,我个人优选在逻辑思维上简单直观的广度优先搜索方法2、二维矩阵考察连通域/岛屿问题,包括简单的连通域染色、岛屿数量、飞地数量、岛屿面积等,复杂一点的题目考察对每个连通域/岛屿如何更好地标记,比如最大人工岛(简单的数字标记)、岛屿形状(相对位置连起来的元组或字符串标记)等原创 2023-09-16 15:19:06 · 485 阅读 · 0 评论 -
leetcode分类刷题:二叉树(九、二叉搜索树的节点插入删除)
二叉搜索树的节点插入删除通过返回不同情况下的对应节点来覆盖进行实现原创 2023-11-01 15:36:54 · 142 阅读 · 0 评论 -
leetcode分类刷题:二叉树(八、二叉搜索树特有的自顶向下遍历)
二叉搜索树是一个有序树:每个二叉树都满足左子树上所有节点的值均小于它的根节点的值,右子树上所有节点的值均大于它的根节点的值;利用该性质,可以实现二叉搜索树特有的自顶向下遍历原创 2023-10-31 22:22:10 · 161 阅读 · 0 评论 -
leetcode分类刷题:二叉树(七、中序遍历解决二叉搜索树)
1、二叉搜索树是一个有序树:每个二叉树都满足左子树上所有节点的值均小于它的根节点的值,右子树上所有节点的值均大于它的根节点的值;因此,它的中序遍历是一个升序序列,有没有重复元素根据具体题意而定2、本次总结的题型,采用迭代循环的中序遍历+标记节点的思路解决,简单直观原创 2023-10-30 10:38:28 · 70 阅读 · 0 评论 -
leetcode分类刷题:二叉树(六、构造二叉树)
构造二叉树的题目递归模板较为统一直观原创 2023-10-27 10:30:23 · 67 阅读 · 0 评论 -
leetcode分类刷题:二叉树(五、同时遍历两个二叉树)
同时遍历两个二叉树的题目采用的模板风格统一,较为直观简单原创 2023-10-26 14:26:51 · 57 阅读 · 0 评论 -
leetcode分类刷题:二叉树(四、与路径相关的递归)
与路径相关的递归问题通常是在前序遍历和层序遍历上稍加改动,将入栈或入队的元素调整为多元组的形式,将路径记录、路径之和等同时保存上原创 2023-10-25 09:29:22 · 50 阅读 · 0 评论 -
leetcode分类刷题:二叉树(三、与深度相关的递归)
1、与深度相关的递归问题不同于深度优先遍历的前、中、后序遍历,该类问题在递归调用时带有返回值,但它们的核心难点还是在于递归三要素中的提取重复的逻辑,缩小问题规模,即递归函数内部的操作2、在做了“110. 平衡二叉树”之后,会发现本次总结的题型全部都是自底向顶的递归,这种的逻辑还是有点难想的原创 2023-10-23 11:52:15 · 87 阅读 · 0 评论 -
leetcode分类刷题:二叉树(二、简单重复逻辑的递归)
二叉树问题的递归解法最难的地方在于递归三要素中的提取重复的逻辑,缩小问题规模,即递归函数内部的操作,深度优先遍历的前、中、后序遍历是二叉树最基本的题目,其对应的重复逻辑也是最简单的原创 2023-10-21 13:17:52 · 103 阅读 · 0 评论 -
leetcode分类刷题:如何更好地理解递归
参考知乎上递归下的一个高赞回答,觉得写的非常好,挑选有助于自己理解的内容进行简单总结。原创 2023-10-20 17:05:26 · 173 阅读 · 0 评论 -
leetcode分类刷题:二叉树(一、简单的层序遍历)
from typing import List, Optional, Unionfrom collections import deque'''559. N 叉树的最大深度给定一个 N 叉树,找到其最大深度。最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。示例 1: 输入:root = [1,null,3,2,4,null,5,6] 输出:3题眼:二叉树的层序遍历思路:一般 层序遍历的基础上,原创 2023-09-14 18:00:05 · 1141 阅读 · 0 评论 -
leetcode分类刷题:队列(Queue)(三、优先队列用于归并排序)
1、当TopK问题出现在多个有序序列中时,就要用到归并排序的思想了2、将优先队列初始化为添加多个有序序列的首元素的形式,再循环K次优先队列的出队和出队元素对应序列下个元素的入队,就能得到TopK的元素了3、这些题目好像没有TopK 大用小顶堆,TopK 小用大顶堆反着来的经验了,得顺着来了:TopK 大用大顶堆,TopK 小用小顶堆原创 2023-09-12 21:31:39 · 350 阅读 · 0 评论 -
leetcode分类刷题:队列(Queue)(二、优先队列解决TopK简单问题)
1、优先队列好像一般都叫堆,以大顶堆为例,顶部第一个元素最大,底部最后一个元素最小,自顶向底是递减的(更准确的说是非递增的),对外只能访问顶部第一个元素(对应索引为0)和底部最后一个元素(对应索引为-1);在Python中,heapq默认维护小顶堆,构造大顶堆时需要在入堆时添加相反数2、本次博客总结下用优先队列解决TopK简单问题,比如数组中第K大或小的元素、单个序列里第K大或小的距离、根据元素的出现频率排序的问题原创 2023-09-12 21:31:11 · 451 阅读 · 0 评论 -
leetcode分类刷题:队列(Queue)(一、单调队列)
单调队列,看起来是与单调栈对应起来的一样;但是做题的时候感觉单调队列不像单调栈一样,能根据题意自然形成原创 2023-09-12 19:49:36 · 247 阅读 · 0 评论 -
leetcode分类刷题:基于数组的双指针(四、小的移动)
leetcode上有些题是真的太难了,正常读题之后完全想不到要用双指针来求解,本次博客总结的题目是双指针初始时位于数组两端,哪个元素小就移动哪个指针原创 2023-09-11 12:00:27 · 166 阅读 · 0 评论 -
leetcode分类刷题:栈(Stack)(三、下一个更大的数)
1、本次博客总结的“栈(Stack)(三、下一个更大的数)”类型具体是指寻找任一个元素的右边/左边第一个比自己大/小的元素的位置,这与栈的先入后出思想一致2、这种题目用栈处理的算法模板往往叫做单调栈,是因为这种题目代码写完,刚好操作的栈内元素满足单调递增或者递减的规律,本质上还是题型题意符合栈的先入后出思想,所以才使用栈来处理,先入为主地按照单调栈来套模板不是很合适:是先有题型需要用栈处理刚好有个单调栈,不是先有单调栈要去套用解题原创 2023-09-11 11:41:42 · 295 阅读 · 0 评论 -
leetcode分类刷题:栈(Stack)(二、基本计算器类型)
1、顺着“逆波兰表达式”的题目继续做了下推荐的基本计算器类型的几道题,我的天,是真的难,不愧是hard级别的难题2、研究了好几天大佬的题解双栈解决通用「表达式计算」问题,还是不太明白为啥有一个新操作要入栈时,先把栈内可以算的都算了,先简单把大佬思路记录下来吧,后续再看原创 2023-09-08 16:08:07 · 311 阅读 · 0 评论 -
leetcode分类刷题:栈(Stack)(一、字符串相邻元素删除类型)
字符串相邻元素的删除问题,用栈来进行管理,会非常有效;这种题型排在后面的字母会先删除 与 栈先进后出 的思想一致,同时也要关注相邻元素的细节,是个隐含的连续子序列,否则即使思想上与栈一致,位置上不相邻,栈是没法处理的原创 2023-09-06 16:50:40 · 350 阅读 · 0 评论 -
leetcode分类刷题:字符串匹配KMP算法
字符串匹配过程中的KMP算法,也是一种双指针的特例,一个指针指向原串,另一个指针指向匹配串,原串指针负责遍历原串的元素,匹配串指针标记匹配串中当前第一个没匹配上的 位置(下次匹配要比较的位置)。原创 2023-09-03 13:20:43 · 379 阅读 · 0 评论 -
leetcode分类刷题:字符串及单词翻转
1、本文此次总结的题型“leetcode分类刷题:字符串及单词翻转”较为简单,是双指针法在字符串及单词翻转类题型中的应用2、如果单词翻转类题型加了O(1)空间复杂度的要求,算法思路会变得稍微复杂一点原创 2023-09-01 11:57:26 · 360 阅读 · 0 评论 -
leetcode分类刷题:易混题辨析一、209. 长度最小的子数组 vs 560. 和为K的子数组
这两道题都是对连续子数组加和进行考察,细节区别在于数组元素在209. 长度最小的子数组为正整数(窗口增加元素递增,减少元素递减),在560. 和为K的子数组为整数209. 长度最小的子数组采用滑动窗口的算法,560. 和为K的子数组采用前缀和+哈希表的算法原创 2023-08-31 18:06:14 · 250 阅读 · 0 评论 -
leetcode分类刷题:哈希表(Hash Table)(四、前缀和 处理连续子数组)
本文总结的题型同样为对连续子数组加和进行考察,区别于leetcode分类刷题:滑动窗口(一、基本子数组类型)的是,数组元素为整数,不是正整数了,因此需要按照 前缀和(按照闭区间形式,当前索引位置的值也算进去好理解)+哈希表 的思路进行解决,最后会发现这种题型就是leetcode分类刷题:哈希表(Hash Table)(一、简单的两数之和)的扩展,在解题模板上会有点类似原创 2023-08-31 17:54:38 · 701 阅读 · 0 评论 -
leetcode分类刷题:哈希表(Hash Table)(三、循环存在问题)
1、当需要快速判断某元素是否出现在序列中时,就要用到哈希表了。2、本文针对的总结题型为给定的序列或需要构造的序列中是否存在循环,与 160. 相交链表、 141. 环形链表、142. 环形链表 II的题型一样。原创 2023-08-28 21:17:28 · 235 阅读 · 0 评论 -
leetcode分类刷题:哈希表(Hash Table)(二、数组交集问题)
1、当需要快速判断某元素是否出现在序列中时,就要用到哈希表了。2、本文针对的总结题型为给定两个及多个数组,求解它们的交集。接下来,按照由浅入深层层递进的顺序总结以下几道题目。3、以下题目需要共同注意的是:对于两个数组,我们总是尽量把短数组转换为哈希表,以减少后续在哈希表中的元素查找时间。原创 2023-08-28 21:16:28 · 829 阅读 · 0 评论 -
leetcode分类刷题:哈希表(Hash Table)(一、简单的两数之和)
1、当需要快速判断某元素是否出现在序列中时,就要用到哈希表了。2、本文针对的总结题型为简单的两数之和问题,这种题目的难易程度取决于求解的目标,如果需要返回的是答案的索引、个数,那么就相对简单一些;如果需要返回答案的值构成的二元组、三元组之类的,就需要麻烦点考虑去重的问题了原创 2023-08-30 10:16:16 · 324 阅读 · 0 评论 -
leetcode分类刷题:链表(二、双指针)
本文针对的总结题型为采用双指针来解决原创 2023-08-27 23:41:42 · 233 阅读 · 0 评论 -
leetcode分类刷题:链表(一、创建虚拟头节点)
本文针对的总结题型为建立虚拟头节点解决的问题,这类问题在进行对头节点的操作时,与其它节点会不一致,因此建立虚拟头节点使得所有节点的操作一致,最后返回dummyHead.next原创 2023-08-27 23:40:05 · 279 阅读 · 0 评论 -
leetcode分类刷题:滑动窗口(四、两个序列+窗口不定长类型)
1、同样是给定两个序列,判断短序列在长序列中最短的覆盖连续子序列,那么此时的滑窗长度就大于等于短序列长度了,变为不定长的了2、本文总结的题型短序列同样为滑动窗口+哈希表+matchKeys标记(覆盖的键数量),这里的覆盖含义恰好为上篇总结中的刚好匹配或过匹配,看起来上篇总结像是本文总结的题型的特殊情况,因为本文的解法和上篇完全一样,且把题型和模板对应起来理解的更深刻原创 2023-08-24 21:14:18 · 253 阅读 · 0 评论 -
leetcode分类刷题:滑动窗口(三、两个序列+窗口定长类型)
1、通过对滑动窗口前两个题型的总结,我们几乎已经习惯在给定的一个序列里使用滑动窗口的模板解题了,本次对应的“三、两个序列+窗口定长类型”,也是考察连续子数组、连续子串问题,只不过这次会给定两个序列,判断短序列在长序列中是否存在字母异位词或排列2、对于这类题目,通常需要先把短子串转为待匹配的哈希表,再定义一个matchKeys标记,计数滑动窗口内的元素与待匹配的哈希表的键的刚好匹配或过匹配的数量原创 2023-08-24 21:00:14 · 272 阅读 · 0 评论 -
leetcode分类刷题:滑动窗口(二、重复元素类型)
考察连续子数组、连续子串问题时,往往需要滑动窗口进行维护,即设置左右指针维护滑动窗口的左右边界进一步结合连续子数组、连续子串中对重复元素个数、种类进行考察时,需要使用和维护哈希表这类问题最关键的还是思考清楚左右指针如何更新:右指针遍历数组,左指针在哈希表满足一定条件时更新原创 2023-08-23 11:59:10 · 115 阅读 · 0 评论 -
leetcode分类刷题:滑动窗口(一、基本子数组类型)
滑动窗口是双指针法的一种特殊形式,两个指针分别标记滑动窗口的左右边界,且右指针负责遍历元素, 关键在于思考清楚窗口的左边界如何更新需要注意数组中的全部元素都是正数,满足 窗口增加元素后的和/积递增,减少元素后的和/积递减原创 2023-08-22 23:08:10 · 132 阅读 · 0 评论 -
leetcode分类刷题:基于数组的双指针(三、有序数组的元素求和)
1、有点像“leetcode分类刷题:二分查找(Binary Search)(一、基于索引(定义域)的类型)”的前提,数组是排序好的,然后求解的目标是元素之和,不是查找某个元素第一次大于等于数组元素的索引位置2、稍微复杂化的题型是对三元组、四元组等的求解,就像“leetcode分类刷题:哈希表(Hash Table)(一、简单的两数之和)”中所提到的,这类数组的元素求和题目,难点在于求解的目标,这里需要返回答案的值构成的三元组、四元组等,就需要考虑答案的去重问题;额外可以考虑加上 特殊情况的判断原创 2023-08-30 11:42:22 · 108 阅读 · 0 评论 -
leetcode分类刷题:基于数组的双指针(二、有序数组的排序)
> 1、对于数组上的双指针问题,主要是指两个变量在数组上移动或遍历的问题,之前整理的“二分查找”系列的算法题目,就是双指针解决数组上的索引相向移动。> 2、双指针算法的关键在于:初始化双指针值和双指针值分别更新的条件,保持对以上两点的清晰认知,就能准确掌握这类题目。> 3、本次博客总结的“基于有序数组的类型”题目,该类题目 需要双指针初值总是分别指向最大或最小值处,以便通过O(N)的时间复杂度完成仅一次数组遍历,并达到获取新的有序数组的题目要求。原创 2023-02-11 18:15:54 · 159 阅读 · 0 评论 -
leetcode分类刷题:基于数组的双指针(一、基于元素移除的O(1)类型)
> 1、对于数组上的双指针问题,主要是指两个变量在数组上移动或遍历的问题,之前整理的“二分查找”系列的算法题目,就是双指针解决数组上的索引相向移动。> 2、双指针算法的关键在于:初始化双指针值和双指针值分别更新的条件,保持对以上两点的清晰认知,就能准确掌握这类题目。> 3、本次博客总结的“基于元素移除的类型”题目,该类题目必然首先需要一个指针遍历数组元素,然后结合要求O(1)的空间复杂度,必然需要额外的指针在原数组上维护新的数组,因此需要采用双指针的解法。原创 2023-02-08 11:40:45 · 197 阅读 · 0 评论 -
leetcode分类刷题:二分查找(Binary Search)(四、基于值域的数组/矩阵类型)
基于值域的二分法与基于定义域的题型不同,它的目标是从一“特殊排序序列”中确定“第k个元素值”,而不像基于定义域的题型是从排序序列中找小于等于特定target值的第一个索引;同时,针对“特殊排序序列”,往往需要嵌套使用双指针法进行操作,进一步增加了对应题型的难度。原创 2023-08-21 18:27:53 · 306 阅读 · 0 评论 -
leetcode分类刷题:矩阵顺时针模拟
1、这种题目是对代码熟练度考察,模拟顺时针建立或访问矩阵,需要注意矩阵是否为方阵2、具体思路:以圈数为循环条件,每一圈都坚持左闭右开的区间规则;当小的行列值为奇数,最后一圈为一行或一列或一个数字的不完整圈3、细节:把 起始圈的上下左右边界 和 i,j标记矩阵的赋值位置 放在圈数循环外部,以方便完整圈数遍历完后使用这些变量;同时,圈数循环内部的最后要对这些变量进行更新原创 2023-08-26 11:41:29 · 689 阅读 · 0 评论 -
leetcode分类刷题:二分查找(Binary Search)(三、基于索引(定义域)的矩阵类型)
二分查找(Binary Search)原创 2023-02-01 14:51:14 · 91 阅读 · 0 评论 -
leetcode分类刷题:二分查找(Binary Search)(二、隐藏有序序列的数学类型)
二分查找(Binary Search)原创 2023-02-01 12:02:35 · 99 阅读 · 0 评论