
leetcode刷题之旅
文章平均质量分 53
leetcode一路历程
黑猫爱小鹿
这个作者很懒,什么都没留下…
展开
-
2022 第297周周赛
leetcode第297周周赛原创 2022-06-25 20:36:26 · 251 阅读 · 0 评论 -
水塘抽样(解决k个数据均匀抽样问题)
水塘抽样文章目录水塘抽样背景思路k=1k>1例题[398. 随机数索引](https://leetcode-cn.com/problems/random-pick-index/)背景给定一个数据流,但是数据流的长度N很大,且N直到处理完所有数据之前都不可知,如何在只遍历一遍数据(O(N))的情况下,能够随机选取出这组数据的k个概率相等的均匀抽样。(包含未知大小数据流中随机选取k个数据,使得每个数据抽取到的概率相等)(1)仅扫描数据一次。(2)空间复杂度为O(K)。空间复杂度与整个数据量无关,原创 2022-04-25 18:54:28 · 1561 阅读 · 0 评论 -
Lc2045到达目的地的第二短时间
2045. 到达目的地的第二短时间help城市用一个 双向连通 图表示,图中有 n 个节点,从 1 到 n 编号(包含 1 和 n)。图中的边用一个二维整数数组 edges 表示,其中每个 edges[i] = [ui, vi] 表示一条节点 ui 和节点 vi 之间的双向连通边。每组节点对由 最多一条 边连通,顶点不存在连接到自身的边。穿过任意一条边的时间是 time 分钟。每个节点都有一个交通信号灯,每 change 分钟改变一次,从绿色变成红色,再由红色变成绿色,循环往复。所有信号灯都 同时 改原创 2022-01-24 14:28:48 · 654 阅读 · 0 评论 -
LC785.判断二分图(BFS/DFS/并查集)
LC785.判断二分图文章目录LC785.判断二分图[785. 判断二分图](https://leetcode-cn.com/problems/is-graph-bipartite/)分析题解785. 判断二分图难度中等329存在一个 无向图 ,图中有 n 个节点。其中每个节点都有一个介于 0 到 n - 1 之间的唯一编号。给你一个二维数组 graph ,其中 graph[u] 是一个节点数组,由节点 u 的邻接节点组成。形式上,对于 graph[u] 中的每个 v ,都存在一条位于节点 u 和节原创 2021-12-27 15:34:06 · 199 阅读 · 0 评论 -
1609. 奇偶树(广度优先搜索)
1609. 奇偶树难度中等44如果一棵二叉树满足下述几个条件,则可以称为 奇偶树 :二叉树根节点所在层下标为 0 ,根的子节点所在层下标为 1 ,根的孙节点所在层下标为 2 ,依此类推。偶数下标 层上的所有节点的值都是 奇 整数,从左到右按顺序 严格递增奇数下标 层上的所有节点的值都是 偶 整数,从左到右按顺序 严格递减给你二叉树的根节点,如果二叉树为 奇偶树 ,则返回 true ,否则返回 false 。示例 1:输入:root = [1,10,4,3,null,7,9,12,8,6原创 2021-12-25 15:15:25 · 137 阅读 · 0 评论 -
1705. 吃苹果的最大数目(贪心算法)
1705. 吃苹果的最大数目难度中等104有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 且 days[i] == 0 表示。你打算每天 最多 吃一个苹果来保证营养均衡。注意,你可以在这 n 天之后继续吃苹果。给你两个长度为 n 的整数数组 days 和 a原创 2021-12-24 14:54:33 · 697 阅读 · 0 评论 -
Rabin-Karp算法(加速字符串匹配)
Rabin-Karp算法文章目录Rabin-Karp算法[1044. 最长重复子串](https://leetcode-cn.com/problems/longest-duplicate-substring/)Rabin-Karp算法的作用就是实现字符串的快速对比,判断字符串是否相同。算法的思想如下:将字符串进行编码,利用HashMap实现快速的匹配对比判断。所以关键是进行编码的规则,也就是利用hash函数进行编码映射。eg abcd abc编码为 22∗0+21∗1+20∗2=42^2*0+原创 2021-12-23 15:22:26 · 1092 阅读 · 0 评论 -
686. 重复叠加字符串匹配
686. 重复叠加字符串匹配文章目录[686. 重复叠加字符串匹配](https://leetcode-cn.com/problems/repeated-string-match/)自己的解题思路参考别人别人解题思路给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。注意:字符串 "abc" 重复叠加 0 次是 "",重复叠加 1 次是 "abc",重复叠加 2 次是 "abcabc"。示例 1:输入:a =原创 2021-12-22 15:24:58 · 427 阅读 · 0 评论 -
手把手教学----------带你手撕LFU
手把手带你手撕LFU文章目录手把手带你手撕LFU代码LFU的淘汰策略是优先淘汰最久的使用频率最低的那个所以第一步put如果没有超过容量,需要知道key对应的插入那么一个频率块,需要知道当前的频率块在里面删除如果超过了,要知道最小的频率在哪里get快速知道key对应的value在哪里需要快速的删除,插入所以我们设计如下struct Node: 包括key value freq 三个属性unordered_map<int,List<Node>>原创 2021-10-18 14:37:04 · 196 阅读 · 0 评论 -
手把手带你手撕差分
手把手带你手撕差分文章目录手把手带你手撕差分概念例题[1109. 航班预订统计](https://leetcode-cn.com/problems/corporate-flight-bookings/)概念例题1109. 航班预订统计难度中等206这里有 n 个航班,它们分别从 1 到 n 进行编号。有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 fir原创 2021-08-31 11:03:05 · 113 阅读 · 0 评论 -
全网最详细解释tarjan算法
tarjan算法tarjan算法是为了计算强连通分量的强连通分量也就是在有向图当中,能够双方都能够到达对方的点集视频链接代码实现#include <bits/stdc++.h>using namespace std;int times = 1; // 时间搓stack<int> st; // 栈vector<int> dfn; // 访问的时间点vector<int> low; // 能够回溯到的最小时间点vecto原创 2021-08-20 21:24:42 · 3670 阅读 · 0 评论 -
图论bfs与dfs之网络延迟时间
743. 网络延迟时间难度中等343有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。示例 1:输入:times = [[2,1,1],[2,3,1],[3,4,1]], n = 4, k = 2原创 2021-08-02 14:21:36 · 213 阅读 · 0 评论 -
带你手撕前缀和
带你手撕前缀和文章目录带你手撕前缀和参考构造二维前缀和的三种方法例题参考linklink1构造二维前缀和的三种方法先计算第一行与第一列再进行别的计算先固定行计算每一行的前缀和,再固定相应行的列的前缀和增加一维直接计算 pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+data[i][j]不说了上代码// 这里讲的是二维的差分数组的应用#include <iostream>#include <vector>原创 2021-07-30 22:04:01 · 106 阅读 · 0 评论 -
怎么用数组表示二叉树
怎么用数组表示二叉树数组怎么表示二叉树如果父节点的下标是i那么左子节点的下标i*2+1右子节点的下标的i*2+21104. 二叉树寻路难度中等99在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是原创 2021-07-29 10:40:41 · 3129 阅读 · 1 评论 -
深刻体验DFS与BFS之----HJ43 迷宫问题
#HJ43 迷宫问题描述定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。入口点为[0,0],既第一格是可以走的路。原创 2021-07-27 10:46:54 · 521 阅读 · 0 评论 -
牛客网第三次模拟笔试第三题
牛客网第三次模拟笔试----编程第三题题目大意,就是有一个数组eg input[1,5,2,6]要输出的结果就是一个相同大小的数组h h[i]代表的含义就是,将输入数组中的每一位都变成input[i]所需与的操作数,操作只允许在别的位上加1或者减一思路思路就是前缀和,如过数组长度比较小,那么就可以用map来进行题解什么是前缀和,前缀和有什么用sum[i]代表的是[0---i-1]的这个一个区间的和那么好处和作用就很明显,就是能够快速的计算某一个区间的和那么以 [1,5,2,6]为例,要原创 2021-06-25 14:38:32 · 350 阅读 · 0 评论 -
牛客----购物单
购物单描述王强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:主件 附件电脑 打印机,扫描仪书柜 图书书桌 台灯,文具工作椅 无如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。王强想买的东西很多,为了不超出预算,他把每件物品规定了一个重要度,分为 5 等:用整数 1 ~ 5 表示,第 5 等最重要。他还从因特原创 2021-06-17 13:41:08 · 415 阅读 · 0 评论 -
多指针应用-------三数之和与四数之和
15. 三数之和难度中等3421给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。**注意:**答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]class Solution原创 2021-06-16 16:23:53 · 209 阅读 · 0 评论 -
动态规划之--------基本时间序列型dp
基本时间序列型文章目录基本时间序列型动态规划的特点那么什么是基本时间序列型特点套路[198. 打家劫舍](https://leetcode-cn.com/problems/house-robber/)[213. 打家劫舍 II](https://leetcode-cn.com/problems/house-robber-ii/)[122. 买卖股票的最佳时机 II](https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/)[原创 2021-06-11 14:16:02 · 542 阅读 · 1 评论 -
LC279 完全平方数
279. 完全平方数难度中等916给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3 解释:12 = 4 + 4 + 4示例 2:输入:n = 13原创 2021-06-11 10:43:42 · 120 阅读 · 1 评论 -
01背包问题的变种问题(奇行种)
01背包问题的转化类型文章目录01背包问题的转化类型[494. 目标和](https://leetcode-cn.com/problems/target-sum/)[1049. 最后一块石头的重量 II](https://leetcode-cn.com/problems/last-stone-weight-ii/)494. 目标和难度中等796给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :例如原创 2021-06-08 14:04:44 · 502 阅读 · 0 评论 -
最长公共子串
最长公共子串 算法知识视频讲解中等 通过率:27.18% 时间限制:5秒 空间限制:500M知识点动态规划题目题解(34)讨论(132)排行描述给定两个字符串str1和str2,输出两个字符串的最长公共子串题目保证str1和str2的最长公共子串存在且唯一。示例1输入:"1AB2345CD","12345EF"复制返回值:"2345"复制备注:1 \leq |str_1|, |str_2| \leq 5\,0001≤∣str1∣,∣str2∣≤5000cla原创 2021-05-31 20:45:58 · 147 阅读 · 0 评论 -
leetcode 岛屿数量DFS版
题目描述给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。岛屿: 相邻陆地可以组成一个岛屿(相邻:上下左右) 判断岛屿个数。示例1输入[[1,1,0,0,0],[0,1,0,1,1],[0,0,0,1,1],[0,0,0,0,0],[0,0,1,1,1]]返回值3备注:- 矩阵范围<=200*200class Solution {public: /** * 判断岛屿数量 * @para原创 2021-05-08 16:58:53 · 339 阅读 · 0 评论 -
leetcode---每日一题:1011. 在 D 天内送达包裹的能力
1011. 在 D 天内送达包裹的能力传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1原创 2021-04-26 12:57:35 · 426 阅读 · 0 评论 -
回溯之分割子集问题大全
文章目录[131. 分割回文串](https://leetcode-cn.com/problems/palindrome-partitioning/)[93. 复原 IP 地址](https://leetcode-cn.com/problems/restore-ip-addresses/)[90. 子集 II](https://leetcode-cn.com/problems/subsets-ii/)131. 分割回文串难度中等668收藏分享切换为英文接收动态反馈给你一个字符串 s,请你将 s 分割成原创 2021-03-31 11:38:46 · 179 阅读 · 0 评论 -
74. 搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:每行中的整数从左到右按升序排列。每行的第一个整数大于前一行的最后一个整数。示例 1:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3输出:true示例 2:输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13输出:false执行用时:0 ms, 在所有原创 2021-03-30 10:02:54 · 179 阅读 · 0 评论 -
1004. 最大连续1的个数 III
1004. 最大连续1的个数 III难度中等234给定一个由若干 0 和 1 组成的数组 A,我们最多可以将 K 个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K原创 2021-02-20 13:10:02 · 81 阅读 · 0 评论 -
leetcode之二分查找
二分查找是一种在每次比较之后将查找空间一分为二的算法。每次需要查找集合中的索引或元素时,都应该考虑二分查找。如果集合是无序的,我们可以总是在应用二分查找之前先对其进行排序。成功的二分查找的 3 个部分二分查找一般由三个主要部分组成:预处理 —— 如果集合未排序,则进行排序。二分查找 —— 使用循环或递归在每次比较后将查找空间划分为两半。后处理 —— 在剩余空间中确定可行的候选者。模板int binarySearch(int[] nums, int target) { int lef原创 2020-10-08 16:58:06 · 146 阅读 · 0 评论 -
图解快排
快排的两个重要思想1. 找到分界点,两边进行排序2. 原地排序我们遍历 p 到 r 之间的数据,将小于 pivot 的放到左边,将大于 pivot 的放到右边,将 pivot 放到中间。经过这一步骤之后,数组 p 到 r 之间的数据就被分成了三个部分,前面 p 到 q-1 之间都是小于 pivot 的,中间是 pivot,后面的 q+1 到 r 之间是大于 pivot 的。原地排序完整代码class Solution {public: void sortColors(vector原创 2020-10-07 17:03:40 · 300 阅读 · 0 评论 -
回溯
回溯解决一个回溯问题,实际上就是一个决策树的遍历过程。你只需要思考3个问题:1、路径:也就是已经做出的选择。2、选择列表:也就是你当前可以做的选择。3、结束条件:也就是到达决策树底层,无法再做选择的条件框架result = []def backtrack(路径,选择列表): if 满足结束条件: result.add(路径) return for 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选原创 2020-09-12 19:30:36 · 249 阅读 · 1 评论 -
矩阵中的最长递增路径
给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为 [1, 2, 6, 9]。```示例 2:输入: nums = [ [3,4,5], [3,2,6], [2,2,1]] 输出: 4 解释: 最长递增路径是 [3, 4, 5, 6原创 2020-08-22 20:28:08 · 448 阅读 · 0 评论 -
二叉搜索树的最近公共子节点
二叉搜索树的最近公共子节点题目给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q =原创 2020-07-26 19:27:50 · 351 阅读 · 2 评论 -
leetcode之博弈问题
leetcode 之博弈问题亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多来决出胜负。石子的总数是奇数,所以没有平局。亚历克斯和李轮流进行,亚历克斯先开始。 每回合,玩家从行的开始或结束处取走整堆石头。 这种情况一直持续到没有更多的石子堆为止,此时手中石子最多的玩家获胜。假设亚历克斯和李都发挥出最佳水平,当亚历克斯赢得比赛时返回 true ,当李赢得比赛时返回 false 。输入:[5,3,4,5]输出:true解释原创 2020-07-11 14:51:20 · 544 阅读 · 0 评论 -
leetcode之编辑距离问题
编辑距离问题给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -> rose (删除 'r')rose -> ros (删除 'e')输入:word1 = "intention",原创 2020-07-04 11:14:33 · 396 阅读 · 0 评论 -
leetcode之递归详解
递归其实递归和二叉树遍历很像,要理解递归,就要理解二叉树遍历.可以看看这个理解一下首先说明一个问题,简单阐述一下递归,分治算法,动态规划,贪心算法这几个东西的区别和联系,心里有个印象就好。递归这种尽量能不用就不用,有时候会造成过大的额外开销以及栈溢出,可以根据这个思想选用贪心算法,动态规划,bfs,dfs等递归是一种编程技巧,一种解决问题的思维方式;分治算法和动态规划很大程度上是递归思想基础上的(虽然动态规划的最终版本大都不是递归了,但解题思想离不开递归),解决更具体问题的两类算法思想;贪心算法是原创 2020-06-24 09:11:58 · 451 阅读 · 1 评论 -
leetcode动态规划之零钱兑换问题
给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。输入: amount = 10, coins = [10] 输出: 1解题代码:class S原创 2020-06-21 13:51:46 · 663 阅读 · 0 评论 -
leetcode之BFS
BFSBFS算法框架初始化队列是否为空是否要加入visited向四处扩展是否到达底部弹出添加进队列例子给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明: 叶子节点是指没有子节点的节点。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; *原创 2020-06-19 08:34:42 · 181 阅读 · 0 评论 -
leetcode之动态规划总结
总结动态规划如果觉得好请点赞收藏首先动态规划存在重叠子问题这时候就需要备忘录(就是子问题得到结果先不要返回,先放到备忘录中,下次计算先在备忘录里找,找到了的就可以直接用)或者DP table来优化穷举的过程.避免不必要的计算.举个例子就是说斐波那契数列的优化.而且,动态规划问题一定会具有最优子结构解决思路如下判断子问题是否独立明确状态定义dp数组/函数含义和大小及初始化明确选择并且择优并列出状态转移方程明确base case选择正确的遍历方式ps: 凡是需要涉及到递归的问题的时候,最好都要画出原创 2020-06-12 16:43:10 · 330 阅读 · 0 评论 -
二叉树遍历引出递归树算法框架
文章目录自顶向下==前序遍历==自底向上==后序遍历====中序遍历==自顶向下递归有点像stack,先进后出“自顶向下” 意味着在每个递归层级,我们将首先访问节点来计算一些值,并在递归调用函数时将这些值传递到子节点。 所以 “自顶向下” 的解决方案可以被认为是一种前序遍历。 具体来说,递归函数 top_down(root, params) 的原理是这样的:1. return specific value for null node2. update the answer if needed原创 2020-06-09 20:22:07 · 297 阅读 · 0 评论