![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 82
xylitolz
Ta很懒,还没有添加简介
展开
-
LeetCode 241. 为运算表达式设计优先级(分治/记忆化递归/动态规划)
将字符串按照运算符拆分成左右两个子字符串,分别计算出左右两个子字符串的结果集,再按照拆分运算符对结果集进行合并,对于子字符串也可以通过不断拆分来获得结果集(递归)以 为例,可拆分为:为了防止重复计算,可以使用来保存子字符串对应的结果集。......原创 2022-07-01 12:40:33 · 433 阅读 · 1 评论 -
LeetCode 1175. 质数排列(质数判断+组合数学)
本题总的方案数=「所有质数都放在质数索引上的方案数」×「所有合数都放在合数索引上的方案数」本题总的方案数=「所有质数都放在质数索引上的方案数」\times \\ 「所有合数都放在合数索引上的方案数」本题总的方案数=「所有质数都放在质数索引上的方案数」×「所有合数都放在合数索引上的方案数」「所有质数都放在质数索引上的方案数」:「所有合数都放在合数索引上的方案数」:...原创 2022-06-30 09:38:41 · 427 阅读 · 0 评论 -
LeetCode 6094. 公司命名(分组+哈希)
LeetCode 6094. 公司命名(分组+哈希)转载 2022-06-12 20:17:33 · 337 阅读 · 0 评论 -
LeetCode 5289. 公平分发饼干(集合划分问题/回溯)
LeetCode 5289. 公平分发饼干(集合划分问题/回溯)原创 2022-06-12 18:01:08 · 299 阅读 · 0 评论 -
LeetCode第297场周赛
LeetCode第297场周赛原创 2022-06-12 12:01:13 · 99 阅读 · 0 评论 -
LeetCode 890. 查找和替换模式(模拟+双哈希表)
LeetCode 890. 查找和替换模式(模拟+双哈希表)原创 2022-06-12 10:09:00 · 131 阅读 · 0 评论 -
LeetCode 497. 非重叠矩形中的随机点(前缀和+二分)
LeetCode 497. 非重叠矩形中的随机点 (前缀和 + 二分)原创 2022-06-09 10:47:31 · 199 阅读 · 0 评论 -
LeetCode 1037. 有效的回旋镖(向量叉乘)
「三点各不相同且不在一条直线上」等价于「两个向量的叉乘结果不为零」:v⃗1×v⃗2≠0\vec{v}_{1} \times \vec{v}_{2} \neq 0v1×v2=0算法流程:原创 2022-06-08 17:41:41 · 183 阅读 · 0 评论 -
LeetCode第293场周赛
文章目录5234. 移除字母异位词后的结果数组题目描述方法一:模拟方法二:模拟+字符串排序6064. 不含特殊楼层的最大连续楼层数题目描述方法:排序后计算间隔6065. 按位与结果大于零的最长组合题目描述方法一:DFS(超时)方法二:脑筋急转弯6066. 统计区间中的整数数目5234. 移除字母异位词后的结果数组题目描述5234. 移除字母异位词后的结果数组方法一:模拟class Solution { public List<String> removeAnagram原创 2022-05-15 12:50:27 · 209 阅读 · 0 评论 -
LeetCode. 2233. K 次增加后的最大乘积(数学/最小堆)
文章目录题目方法一:最小堆Reference题目2233. K 次增加后的最大乘积方法一:最小堆提示:数组中有两个元素,可以执行一次增加操作,那么选择较小的元素进行增加操作会使得最终乘积最大证明:用 x,y(x≥y)x, y (x \ge y)x,y(x≥y) 来表示两个元素,对较大元素进行操作后的乘积为 (x+1)y=xy+y(x + 1)y = xy + y(x+1)y=xy+y,而对较小元素进行操作后的乘积为 x(y+1)=xy+xx(y + 1) = xy + xx(y+1)=原创 2022-05-10 20:52:52 · 505 阅读 · 1 评论 -
LeetCode. 75. 颜色分类(荷兰国旗问题/双指针)
文章目录题目方法一:单指针方法二:双指针Reference题目75. 颜色分类方法一:单指针本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出考虑对数组进行两次遍历。在第一次遍历中,将数组中所有的 0 交换到数组的头部。在第二次遍历中,将数组中所有的 1 交换到头部的 0 之后。此时,所有的 2 都出现在数组的尾部,这样就完成了排序。算法流程:使用一个指针 ptr\textit{ptr}ptr 表示「头部」的范围,ptr 中存储了一个原创 2022-05-06 15:37:25 · 737 阅读 · 0 评论 -
LeetCode. 1584. 连接所有点的最小费用(最小生成树/Kruskal 算法/并查集)
文章目录题目方法一:Kruskal 算法方法二:建图优化的 KruskalReference题目1584. 连接所有点的最小费用方法一:Kruskal 算法Kruskal 算法是一种常见并且好写的最小生成树算法。该算法的基本思想是从小到大加入边,是一个贪心算法。其算法流程为:假设连通图G=(V,E)G=(V,E)G=(V,E),令最小生成树的初始状态为只有nnn个顶点而无边的非连通图T=(V,{})T=(V,\{\})T=(V,{}),图中每个顶点自成一个连通分量在EEE中选原创 2022-05-03 22:07:43 · 506 阅读 · 0 评论 -
LeetCode 2249. 统计圆内格点数目(枚举)
文章目录题目方法一:DFS(超时)方法二:枚举格点题目2249. 统计圆内格点数目方法一:DFS(超时)算法流程:枚举所有圆,对于每个圆,从圆心出发,利用DFS将圆内的格点都保存在集合中利用Set去除重复格点,最后返回Set大小即为出现在 至少一个 圆内的 格点数目class Solution { public int countLatticePoints(int[][] circles) { int n = circles.length;原创 2022-04-28 09:26:10 · 313 阅读 · 0 评论 -
LeetCode 43. 字符串相乘(模拟)
文章目录题目方法一:模拟题目43. 字符串相乘方法一:模拟竖式乘法示意图如下:通过模拟「竖式乘法」的方法计算乘积,计算 s\textit{s}s 的每一位和 t\textit{t}t 的每一位的乘积进行存储,然后做加法。class Solution { public String multiply(String s, String t) { if ("0".equals(s) || "0".equals(t)) { return "0原创 2022-04-27 17:20:57 · 205 阅读 · 0 评论 -
LeetCode 883. 三维形体投影面积(数学)
文章目录题目方法:数学题目883. 三维形体投影面积方法:数学xyxyxy 平面的投影面积等于网格上非零数值的数目yz\texttt{yz}yz 平面的投影面积等于网格上每一列最大数值之和zx\texttt{zx}zx 平面的投影面积等于网格上每一行最大数值之和返回上述三个投影面积之和。class Solution { public int projectionArea(int[][] grid) { int n = grid.length;原创 2022-04-26 15:43:27 · 351 阅读 · 0 评论 -
LeetCode 398. 随机数索引(哈希表/水塘抽样)
文章目录题目方法一:哈希表方法二:水塘抽样(不定长数据流)Reference题目398. 随机数索引方法一:哈希表在构造函数中,使用哈希表记录nums中相同元素的下标在pick函数中,从哈希表中取出target对应的下标列表,然后随机选择其中一个下标并返回class Solution { Map<Integer, List<Integer>> map = new HashMap<>(); public Solution(int[] nu原创 2022-04-25 11:08:55 · 165 阅读 · 0 评论 -
LeetCode 6043. 统计包含每个点的矩形数目(二分)
文章目录题目方法一:哈希 + 二分Reference题目6043. 统计包含每个点的矩形数目方法一:哈希 + 二分由题目提示可知:1≤li≤1091≤hi≤1001 \le l_i \le 10^9 \\1 \le h_i \le 1001≤li≤1091≤hi≤100即矩形的高度范围远远小于矩形宽度。因此考虑对宽度进行二分。算法流程:创建一个哈希表map,key为矩形的高度,value为具有相同高度的矩形的宽度,遍历rectangles,填充该map,随后,遍历原创 2022-04-24 16:36:49 · 887 阅读 · 0 评论 -
LeetCode第290场周赛
文章目录6041. 多个数组求交集题目描述哈希6042. 统计圆内格点数目题目描述枚举6043. 统计包含每个点的矩形数目6044. 花期内花的数目6041. 多个数组求交集题目描述6041. 多个数组求交集哈希class Solution { public List<Integer> intersection(int[][] nums) { int n = nums.length; int[] freq = new int[1001]原创 2022-04-24 12:45:45 · 520 阅读 · 0 评论 -
LeetCode 2203. 得到要求路径的最小带权子图(dijkstra算法)
文章目录题目描述解题思路:三次最短路Reference题目描述2203. 得到要求路径的最小带权子图解题思路:三次最短路从 src1\textit{src}_1src1 到 dest\textit{dest}dest 有唯一的一条简单路径,记为 XXX从 src2\textit{src}_2src2 到 dest\textit{dest}dest 有唯一的一条简单路径,记为 YYY假设 XXX 上第一个与 YYY 共有的节点为 ccc,显然这样的 ccc 是一定存在的原创 2022-04-21 10:45:08 · 737 阅读 · 0 评论 -
LeetCode 386. 字典序排数(数学/DFS)
文章目录题目描述解法一:DFSReference题目描述386. 字典序排数解法一:DFS将 [1,n][1, n][1,n] 的数按照字典序添加到答案,本质上是对一颗节点数量为 nnn,形态类似字典树的多阶树进行遍历递归树如下:递归实现:递归调用栈,会使用栈的空间,对于栈空间的使用取决于递归调用深度class Solution { public List<Integer> lexicalOrder(int n) { List<Inte原创 2022-04-18 14:28:35 · 368 阅读 · 0 评论 -
LeetCode 2213. 由单个字符重复的最长子字符串(线段树)
文章目录题目描述解法:线段树Reference题目描述2213. 由单个字符重复的最长子字符串解法:线段树根据题意,本题有kkk次单点修改,kkk次查询最长子字符串,如果每次采用O(n)O(n)O(n)复杂度的暴力查询,那么总的时间复杂度是O(k∗n)O(k*n)O(k∗n),会超时。线段树是一个在 O(n)O(n)O(n) 的初始化后可以以 O(log n)O(log\ n)O(log n)修改、查询与区间有关信息的数据结构。使用线段树求解,底层使用链表实现,需要考原创 2022-04-17 17:25:47 · 948 阅读 · 0 评论 -
LeetCode 787. K 站中转内最便宜的航班(图/Bellman Ford算法)
文章目录贝尔曼-福特算法(Bellman-Ford)简介算法思想算法执行过程应用题目描述分析代码LeetCode 787. K 站中转内最便宜的航班题目描述Bellman Ford + 邻接矩阵Reference贝尔曼-福特算法(Bellman-Ford)简介贝尔曼-福特算法(Bellman-Ford)是由理查德·贝尔曼(Richard Bellman) 和 莱斯特·福特 创立的,求解含负权边的带权有向图的单源最短路径问题的一种算法。它的原理是对图进行V−1V-1V−1次松弛操作(VVV代表图中的点原创 2022-04-16 12:05:45 · 1311 阅读 · 0 评论 -
LeetCode 743. 网络延迟时间(图/Dijkstra算法/堆优化)
文章目录题目描述Dijkstra算法简介方法一:Dijkstra算法方法二:堆优化的Dijkstra算法Reference题目描述743. 网络延迟时间Dijkstra算法简介Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。该算法的主要思想是贪心。将所有节点分成两类:已确定从起点到当前点的最短路长度的节点,以及未确定从起点到当前点的最短路长度的节点(下面原创 2022-04-15 21:37:24 · 970 阅读 · 0 评论 -
LeetCode 395. 至少有 K 个重复字符的最长子串(滑动窗口)
文章目录题目描述滑动窗口解题突破口Reference题目描述395. 至少有 K 个重复字符的最长子串滑动窗口枚举最长子串中的字符种类数目kind∈[1,26]kind \in [1,26]kind∈[1,26],对于给定的字符种类数量kindkindkind,维护滑动窗口的左右边界left,rightleft,rightleft,right、滑动窗口内部每个字符出现的次数 windowwindowwindow、滑动窗口内的字符种类数目 totaltotaltotal 以及滑动窗口内满足「出原创 2022-04-14 11:21:57 · 988 阅读 · 0 评论 -
LeetCode第288场周赛
文章目录6037. 按奇偶性交换后的最大数字题目描述暴力解6038. 向表达式添加括号后的最小结果题目描述暴力解6039. K 次增加后的最大乘积题目描述6040. 花园的最大总美丽值题目描述6037. 按奇偶性交换后的最大数字题目描述暴力解class Solution { public int largestInteger(int num) { StringBuilder sb = new StringBuilder(); int n = num;原创 2022-04-10 12:06:29 · 319 阅读 · 0 评论 -
LeetCode 780. 到达终点(数学推理/反向计算)
文章目录题目描述解法:反向计算Reference题目描述780. 到达终点解法:反向计算题目中给定(sx,sy)(sx,sy)(sx,sy)的范围是[1,109][1,10^9][1,109],且每次转换,只能将另一维的数值累加到当前维,因此在转换过程中绝不会出现负数。如果从(sx,sy)(sx,sy)(sx,sy)开始正向计算,则可能的情况非常多,会超出时间限制。(sx,sy)(sx,sy)(sx,sy)和(tx,ty)(tx,ty)(tx,ty)的范围都是[1,109][1,10^原创 2022-04-09 11:24:49 · 255 阅读 · 0 评论 -
LeetCode 210. 课程表 II(BFS/拓扑排序)
文章目录拓扑排序检测循环依赖题目描述题目分析LeetCode 210 课程表II题目描述解法:BFSReference拓扑排序给定一个包含 nnn 个节点的有向图 GGG,我们给出它的节点编号的一种排列,如果满足:对于图 GGG 中的任意一条有向边 (u,v)(u, v)(u,v),uuu在排列中都出现在 vvv的前面。那么称该排列是图 GGG的「拓扑排序」。根据上述的定义,可以得出两个结论:如果图 GGG 中存在环(即图 GGG 不是「有向无环图」),那么图 GGG 不存在拓扑排序。原创 2022-04-09 10:30:54 · 431 阅读 · 0 评论 -
LeetCode 310. 最小高度树(BFS/DFS/拓扑排序/树形DP)
文章目录题目描述解法一:枚举根节点+DFS求树高(超时)解法二:广度优先搜索解法三:拓扑排序解法四:树形DPReference题目描述310. 最小高度树解法一:枚举根节点+DFS求树高(超时)枚举以每个节点为根构成的树,然后求出该树的高度,所有树的最小高度即为答案,需要的时间复杂度为 O(n2)O(n^2)O(n2)算法流程:从000到n−1n-1n−1枚举根节点利用dfs求出以i(i∈[0,n−1])i(i\in [0,n-1])i(i∈[0,n−1])为根节点的树高,并保原创 2022-04-07 16:29:23 · 829 阅读 · 0 评论 -
LeetCode 2212. 射箭比赛中的最大得分(二进制枚举)
文章目录题目描述解法:二进制枚举Reference题目描述2212. 射箭比赛中的最大得分解法:二进制枚举为了获得可能的最大得分及其对应方法,可以枚举Bob所有可能的胜负情况,计算每种情况下的得分以及所需要的箭数由于每个区域只有 Bob 胜或负两种情况,因此可以用一个 n 位的二进制整数 mask 表示所有区域的胜负情况,其中第 i 位为 0 代表 Bob 在得分为 i 的区域中落败,为 1 则代表 Bob 在该区域取胜维护可能的最大得分maxScore及其对应的二进制状态 stat原创 2022-04-06 16:07:13 · 478 阅读 · 0 评论 -
LeetCode 762.二进制表示中质数个计算置位(位运算lowbit+质数判断)
文章目录题目描述解题思路代码一:库函数+枚举代码二:lowbit+打表代码三:库函数+比特掩码Reference题目描述762. 二进制表示中质数个计算置位解题思路枚举 [left,right][\textit{left},\textit{right}][left,right] 范围内的每个整数,挨个判断是否满足题目要求,对于每个数xxx需要解决两个问题:如何求出xxx的二进制中的111的个数?库函数Integer.bitCount()while循环统计 + lowbit操作:x原创 2022-04-05 17:09:35 · 726 阅读 · 1 评论 -
LeetCode第287场周赛
文章目录6055. 转化时间需要的最少操作数题目描述解法:贪心+模拟5235. 找出输掉零场或一场比赛的玩家题目描述解法:遍历+哈希表5219. 每个小孩最多能分到多少糖果题目描述二分模板题5302. 加密解密字符串题目描述逆向思维Reference6055. 转化时间需要的最少操作数题目描述6055. 转化时间需要的最少操作数解法:贪心+模拟算法流程:计算出correct与current之间的总时间差,单位:分钟按60、15、5、1从大到小的顺序计算增加的次数(借助整除运算)原创 2022-04-03 15:36:25 · 440 阅读 · 0 评论 -
LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色(贪心)
文章目录题目方法:贪心Reference题目2038. 如果相邻两个颜色均相同则删除当前颜色方法:贪心分析题意可知:当 colors 中有一串连续的长度为 LAL_\text{A}LA 的 A 时,Alice 可以删除中间的 LA−2L_\text{A}-2LA−2 个 A,而不能删除两边的 2 个A当 colors 中有一串连续的长度为 LBL_\text{B}LB 的 B 时,Bob 可以删除中间的 LB−2L_\text{B}-2LB−2 个 B,而不能删除两边的原创 2022-03-23 09:27:16 · 155 阅读 · 0 评论 -
LeetCode第285场周赛
文章目录6027. 统计数组中峰和谷的数量题目模拟6028. 统计道路上的碰撞次数题目模拟 + 优先处理 向右6029. 射箭比赛中的最大得分6030. 由单个字符重复的最长子字符串6027. 统计数组中峰和谷的数量题目6027. 统计数组中峰和谷的数量模拟从索引i=2开始遍历,若nums[i]==nums[i-1],则直接continue否则每次从当前索引之前的数组中取出3个数a,b,c,不一定连续,例如假设原数组为[2,4,1,1,6,5],当前索引i=4,那么取出的3个数分原创 2022-03-20 16:06:41 · 1294 阅读 · 0 评论 -
LeetCode 432.全O(1)的数据结构(哈希表+手写双向链表)
文章目录题目描述哈希表+手写双向链表题目描述432. 全 O(1) 的数据结构哈希表+手写双向链表首先,确定好合适的数据结构:双向链表和哈希表(和LeetCode 460. LFU缓存类似的思路,自定义节点并手写双向链表来实现)链表中的每个节点存储一个字符串集合 keys\textit{keys}keys 和一个正整数 cnt\textit{cnt}cnt,表示 keys\textit{keys}keys 中的字符串均出现 cnt\textit{cnt}cnt 次。链表从头到尾的每原创 2022-03-16 20:16:03 · 802 阅读 · 0 评论 -
LeetCode 2044. 统计按位或能得到最大值的子集数目(位运算+回溯/状压DP)
文章目录题目描述方法一:二进制枚举方法三:状态压缩DP方法二:回溯Reference题目描述2044. 统计按位或能得到最大值的子集数目方法一:二进制枚举记 n 是数组 nums\textit{nums}nums 的长度,数组中的每个元素都可以选取或者不选取,因此数组的非空子集数目一共有 (2n−1)(2^n-1)(2n−1)个。用一个长度为 nnn 比特的整数来表示不同的子集,在整数的二进制表示中,nnn 个比特的值代表了对数组不同元素的取舍:第 iii 位值为 111 则表示该子原创 2022-03-15 19:55:06 · 329 阅读 · 0 评论 -
LeetCode 393. UTF-8 编码验证(模拟+位运算)
文章目录题目描述遍历 + 位运算Reference题目描述393. UTF-8 编码验证遍历 + 位运算对于从 data[index]\textit{data}[\textit{index}]data[index] 开始的 UTF-8\text{UTF-8}UTF-8 字符,可根据 data[index]\textit{data}[\textit{index}]data[index] 的值得到该字符的长度 nnn,如果下一个 UTF-8\text{UTF-8}UTF-8 字符存在,则下一个原创 2022-03-13 21:25:36 · 1075 阅读 · 0 评论 -
LeetCode第284场周赛
文章目录6031. 找出数组中的所有 K 近邻下标题目描述暴力解5203. 统计可以提取的工件题目描述并查集+暴力模拟暴力模拟5227. K 次操作后最大化顶端元素题目描述贪心 & 分类讨论6032. 得到要求路径的最小带权子图题目描述Reference6031. 找出数组中的所有 K 近邻下标题目描述暴力解算法流程:遍历nums数组,统计所有nums[i]==key的下标i,并保存在keyList中再次遍历nums数组对于每个nums[i],依次与keyList中记录的下原创 2022-03-13 13:40:30 · 1809 阅读 · 0 评论 -
LeetCode 415.字符串相加(大数相加减 & 10进制/36进制)
文章目录LeetCode 415. 字符串相加(10进制)题目模拟补充:字符串相加(36进制)题目模拟补充:字符串相减(10进制)题目模拟补充:字符串相减(36进制)题目模拟ReferenceLeetCode 415. 字符串相加(10进制)题目415. 字符串相加模拟只需要对两个大整数模拟「竖式加法」的过程。竖式加法就是平常学习生活中常用的对两个整数相加的方法在纸上对两个整数相加的操作:将相同数位对齐,从低到高逐位相加,如果当前位和超过 10,则向高位进一位因此只要将这个过程用代码原创 2022-03-10 11:52:40 · 742 阅读 · 0 评论 -
LeetCode 798.得分最高的最小轮调(差分应用)
文章目录题目解题思路暴力解差分Reference题目798. 得分最高的最小轮调解题思路暴力解遍历每个可能的 k,计算轮调 k个位置之后的数组得分。假设数组的长度是 n,则有 n 种可能的轮调,对于每种轮调都需要 O(n)O(n)O(n) 的时间计算得分,总时间复杂度是 O(n2)O(n^2)O(n2),考虑到数据范围为1≤n≤1051 \le n \le 10^51≤n≤105,暴力解会超出时间限制差分假定当前下标为 i,轮调次数为 k,那么轮调后下标为 i−k,当新下标为负数时原创 2022-03-10 10:40:27 · 163 阅读 · 0 评论 -
LeetCode 1109.航班预订统计(差分)
文章目录题目解题思路:差分Reference题目1109. 航班预订统计解题思路:差分典型的【差分】模板题,只涉及【区间修改 + 单点查询】。对于数组 [1,2,2,4],其差分数组为 [1,1,0,2],差分数组的第 i 个数即为原数组的第 i-1 个元素和第 i 个元素的差值,也就是说对差分数组求前缀和即可得到原数组。当希望对原数组的某一个区间 [l,r] 施加一个增量inc\textit{inc}inc 时,差分数组D对应的改变是:D[l] 增加 inc\textit{inc}i原创 2022-03-09 20:55:06 · 442 阅读 · 0 评论