LeetCode
LeetCode每日一题系列,坚持每日一更~
HERODING77
本科大连理工大学软件工程,目前华东师范大学数据学院硕士在读,兴趣方向为智能体,LLM,自然语言处理,知识图谱,NER,联邦学习,数据结构与算法。
展开
-
LeetCode 1017 负二进制转换【二进制】HERODING的LeetCode之路
照理说进制转换作为最基础的算法,应该是不需要专门开一个专题去讲解的,但是在接触到这道题时,一时间让我头脑发懵。但是这样的方式不好理解,每次翻转为负数之后需要-1,这是因为负二进制的第一位的数值一定是正数,要把后面的负数求和抵消,所以必须得翻转为正数。在位移前,把最后一位上的数减去,即清零,然后再移位,这是最标准的做法。原创 2023-04-05 15:53:46 · 207 阅读 · 0 评论 -
LeetCode 2488 统计中位数为K的子数组【前缀和 Map】HERODING的LeetCode之路
【代码】LeetCode 2488 统计中位数为K的子数组【前缀和 Map】HERODING的LeetCode之路。原创 2023-03-15 21:15:58 · 149 阅读 · 0 评论 -
LeetCode 面试题 17.05 字母与数字【前缀和 Map】HERODING的LeetCode之路
最近遇到不少道前缀和和哈希表结合的题目,这种用空间换时间的方式非常好用,所以以这一题为例。首先要求找到子数组中数字和字母的个数相等,那么我们可以用前缀和的方法,遍历整个数组,遇到数字-1,遇到字母+1,同时用Map将当前前缀和和其位置索引存储下来,这样在找子数组时,如果Map中已经存在了某一前缀和,那么该前缀和位置和当前前缀和位置所包含的区间里,字母和数字个数相同。原创 2023-03-12 10:29:22 · 198 阅读 · 1 评论 -
LeetCode 1255 得分最高的单词集合【状态压缩 位运算】HERODING的LeetCode之路
一道非常好理解的题目,关键点在于用到的方法。题目就是在给定的单词集合和字母集合下,能够组成得分最高的单词子集的得分,本质上就是遍历所有的单词子集,判断子集中的单词能否由字母集合构成,然后计算得分,返回最大得分。原创 2023-02-25 23:40:22 · 137 阅读 · 0 评论 -
LeetCode 1326 灌溉花园的最少水龙头数目【动态规划】HERODING的LeetCode之路
一道非常经典的动态规划题型,即基于范围的动态规划。首先根据题目,0-n为浇灌的范围,所以第一步要把处于该范围的水龙头确定下来,超出该范围的部分直接忽略不看,然后对范围进行排序,方便之后按照水龙头浇灌起始位置进行遍历。定义dp数组dp[n],表示从0-i位置,浇灌所需要最少水龙头的个数。原创 2023-02-21 10:17:55 · 294 阅读 · 0 评论 -
LeetCode 1792 最大平均通过率【结构体 堆】HERODING的LeetCode之路
选择这道题并不是因为这道题有多难,其实只要看完题目,解题思路基本上都能浮现在脑海中,用堆去存储通过率,排序标准是通过率经过+1变换能够有最大幅度的增加,这一点并不好实现,通用的数据结构没法实现这个功能。那么就需要我们自行定义一个数据结构,该数据结构中存储pass和total两个变量,并且对符号原创 2023-02-18 19:33:04 · 225 阅读 · 0 评论 -
LeetCode 1798 你能构造出连续值的最大数目【贪心】HERODING的LeetCode之路
虽然是中等题,但是解题的思路很巧妙,值得一做。题目要求在给定的数组下,构造从0开始的连续整数,即0,1,2…,首先肯定是要把数组进行排序,便于从小到大找数。总不能一个个去试吧,因此一个非常巧妙的思路是构建区间。原创 2023-02-03 11:39:27 · 148 阅读 · 1 评论 -
LeetCode 1129颜色交替的最短路径【广度优先】HERODING的LeetCode之路
一道非常有意思的广度优先遍历问题,一般的优先遍历问题,即可以广度优先遍历,也可以深度优先遍历,甚至动态规划求解,但是这里并不是求单一最优解问题,也不是按照顺序去执行的,所以深度优先和动态规划不太适用。这道题最有意思的地方在于,有向连接是有颜色区分的,也就是说,在构建邻接矩阵时,要考虑颜色的不同,同时红蓝相间连接表明要不断交替遍历红邻接矩阵和蓝邻接矩阵,红先红后两种情况都要考虑,剩下的就是简单的广度优先模板了,只不过要执行两遍罢了。原创 2023-02-01 17:51:48 · 298 阅读 · 0 评论 -
LeetCode 1664生成平衡数组的方案数【动态规划】HERODING的LeetCode之路
理解题意,即删除一个数,让其奇数和偶数位数的和相等。首先如果用暴力方法,每次拿掉一个位置,然后计算剩下的奇偶位置的和,这样时间复杂度太高,如果提前存好奇数偶数位数的求和,那么把当前位置减掉就好了,这里有一个非常重要的一点,如果删除当前位置,后面的奇数位会变成偶数位,偶数位会变成奇数位,因此我们可以存储状态,遍历到位置i,记录i之前偶数位和和奇数位和(pre1和pre2),i之后的偶数位和和奇数位和(after1和after2),如果。观察代码,其实进一步优化,原创 2023-01-27 23:51:33 · 205 阅读 · 0 评论 -
LeetCode 2309 兼具大小写的最好英文字母【位运算】 HERODING的LeetCode之路
【代码】LeetCode 2309 兼具大小写的最好英文字母【位运算】 HERODING的LeetCode之路。原创 2023-01-26 12:07:30 · 169 阅读 · 1 评论 -
LeetCode 1824最少侧跳次数【动态规划】 HERODING的LeetCode之路
很有意思的一道动态规划题目,关键步骤是构建dp数组和状态转移方程,对于每个位置的青蛙,面对下一步有两种选择, 一种是继续前进,一种是跳到别的道路去,如果前面有石头就不能继续前进了,必须跳到别的道路上,这就有了我们的状态转移方程。dp数组定义为dp[i][j],表示在i位置,处于道路j需要至少多少跳。面对第一种选择,如果没有石头,dp[i][j]=dp[i-1][j]即可,有石头更新为无穷大,同时更新当前最小跳数。原创 2023-01-20 19:30:02 · 174 阅读 · 0 评论 -
LeetCode 1825 求出MK平均值【Set 队列】 HERODING的LeetCode之路
好久没更新力扣困难题的题解了,今天这道困难题有点意思,读罢题目一目了然,解题思路清晰明了,就是解题过程细节满满。这是一个数据流场景的问题,保留最后m个元素,但是要去除k个最大,k个最小,返回平均值。其中第6步骤非常巧妙,因为数据流中的元素重复,在删除阶段可能会把后来的相同的数删除,那么我们只要保证后来的相同的数在s2中,最后才删s2,这就保证了先来的相同的元素一定会在s1或者s3中先删除,即使s2中有多个重复也不影响最终结果(但是在s1或s3中会影响)。原创 2023-01-18 10:41:25 · 633 阅读 · 0 评论 -
LeetCode 1813 句子相似性【双指针】 HERODING的LeetCode之路
非常经典的一道双指针问题,根据题意,相似句子即表示,短的句子可以拆分构成长的句子的头尾,但是要注意,是单词拆分,而不是字符。由于C++中没有直接拆分单词的函数,所以我先想到的是通过字符匹配,方法自然是双指针,分别指向短的句子的头尾,判断是否能够和长的句子的头尾进行匹配,结果是越写越复杂,因为字符匹配的话会有很多的特殊情况,比如匹配的单词不完整,短的句子只有一个单词等等,还不如编写一个单词拆分函数,然后单词匹配呢。原创 2023-01-16 11:07:33 · 198 阅读 · 0 评论 -
LeetCode 1658 将x减到0的最小操作数【前缀和 滑动窗口】 HERODING的LeetCode之路
一道很有意思的前缀和和滑动窗口结合的题目。首先分析题目,既然每次都是从数组的最左边或者最右边减去元素值,那么最后剩下的数一定都是在数组中间的数,那不如把中间的数维护成一个滑动窗口,为了计算方便,再构造一个前缀和数组,这样就不需要不断维护滑动窗口中的求和了。原创 2023-01-07 10:15:39 · 111 阅读 · 0 评论 -
LeetCode 1801积压订单中的订单总数【堆】 HERODING的LeetCode之路
【代码】LeetCode 1801积压订单中的订单总数[堆] HERODING的LeetCode之路。原创 2023-01-02 09:49:32 · 181 阅读 · 0 评论 -
LeetCode 1971【并查集 DFS BFS】 寻找图中是否存在路径 HERODING的LeetCode之路
这道题是LeetCode中并查集标签下唯一一道简单题,是图论知识中最简单的问题,直接套用模板就可以得到结果,并查集、DFS、BFS都可以很好解决,首先给出DFS的解法。原创 2022-12-19 11:44:44 · 220 阅读 · 0 评论 -
LeetCode 1691 堆叠长方形的最大高度【排序 动态规划】 HERODING的LeetCode之路
【代码】LeetCode 1691 堆叠长方形的最大高度【排序 动态规划】 HERODING的LeetCode之路。原创 2022-12-10 09:45:34 · 153 阅读 · 0 评论 -
LeetCode 1774 最接近目标价格的甜品成本【DFS 回溯】 HERODING的LeetCode之路
解题思路:传统的回溯问题的目标只有一个,就是对应位置的目标,选择或者不选择,这里的回溯显然要复杂些,涉及两个目标,来达到最优解(注意不是最大或者最小,否则用dp更好处理),那么对于两个目标,其实采用的思想还是一样的,相当于在之前单目标的情况下多了一层循环,那么对于这道题,先对只能选择1个的冰淇淋基料开始,然后遍历每个位置的配料,选择一份或两份或者不选,直到遍历结束,判断是否满足更新条件,更新res,最后返回,代码如下:原创 2022-12-04 09:29:37 · 300 阅读 · 0 评论 -
LeetCode 1769 移动所有球到每个盒子所需的最小操作数[数组] HERODING的LeetCode之路
【代码】LeetCode 1769 移动所有球到每个盒子所需的最小操作数[数组] HERODING的LeetCode之路。原创 2022-12-02 09:26:41 · 232 阅读 · 0 评论 -
LeetCode 895 最大频率栈[Map] HERODING的LeetCode之路
【代码】LeetCode 895 最大频率栈[Map] HERODING的LeetCode之路。原创 2022-11-30 08:52:51 · 367 阅读 · 1 评论 -
LeetCode 813 最大平均值和的分组[动态规划 前缀和] HERODING的LeetCode之路
【代码】LeetCode 813 最大平均值和的分组[动态规划 前缀和] HERODING的LeetCode之路。原创 2022-11-28 08:56:19 · 163 阅读 · 0 评论 -
LeetCode 809 情感丰富的文字[双指针] HERODING的LeetCode之路
【代码】LeetCode 809 情感丰富的文字[双指针] HERODING的LeetCode之路。原创 2022-11-25 00:47:11 · 540 阅读 · 2 评论 -
LeetCode 795 区间子数组个数[双指针 滑动窗口] HERODING的LeetCode之路
解题思路:一道非常巧妙的双指针题型,其实也是滑动窗口题型,首先根本不用考虑太多情况,因为根据题意,只要你连续数组中最大值是大于left的,遍历到的num只要不大于right就还在连续数组中,那么对于连续区间考虑其子数组情况,只有小于left的本身或者连续小于left的数组才不计入连续区间中,因此,在遍历到小于left的num计算子数组个数时,不把当前数计入连续seq中,直到遇到大于等于left的才把之前的计入,代码如下:原创 2022-11-24 09:29:55 · 274 阅读 · 0 评论 -
LeetCode 878 第N个神奇数字[二分查找] HERODING的LeetCode之路
【代码】LeetCode 878 第N个神奇数字[二分查找] HERODING的LeetCode之路。原创 2022-11-22 00:13:26 · 383 阅读 · 1 评论 -
LeetCode 799 香槟塔[模拟+动态规划] HERODING的LeetCode之路
【代码】LeetCode 799 香槟塔[模拟+动态规划] HERODING的LeetCode之路。原创 2022-11-20 09:26:04 · 307 阅读 · 0 评论 -
LeetCode 775 全局倒置与局部倒置[数组 数学] HERODING的LeetCode之路
力扣775,全局倒置与局部倒置原创 2022-11-16 09:54:40 · 237 阅读 · 0 评论 -
LeetCode 791 自定义字符串排序[Map 自定义排序] HERODING的LeetCode之路
【代码】LeetCode 791 自定义字符串排序[Map 自定义排序] HERODING的LeetCode之路。原创 2022-11-13 08:32:23 · 261 阅读 · 0 评论 -
LeetCode 790 多米诺和托米诺平铺[动态规划] HERODING的LeetCode之路
【代码】LeetCode 790 多米诺和托米诺平铺[动态规划] HERODING的LeetCode之路。原创 2022-11-12 10:43:56 · 179 阅读 · 0 评论 -
LeetCode 764 最大加号标志[动态规划] HERODING的LeetCode之路
【代码】LeetCode 764 最大加号标志[动态规划] HERODING的LeetCode之路。原创 2022-11-09 00:23:01 · 225 阅读 · 0 评论 -
LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路
【代码】LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路。原创 2022-11-08 00:04:32 · 310 阅读 · 0 评论 -
LeetCode 1106 解析布尔表达式[栈] HERODING的LeetCode之路
根据思路,首先遍历整个表达式,遇到操作符就存在操作栈中,遇到布尔值就以0和1存在计算栈中,为了更好计算,对于输入的’(‘,标记为-1作为计算的分隔线,当遇到’)'时,开始计算,拿到操作栈顶的操作符,对计算栈中分割线-1以上的所有元素进行计算,计算完毕把分隔符pop出来,再把当前的计算结果放入。读罢题目很容易联想到计算器的操作,思路都是一样的,只不过不是加减乘除,也不是简单的数字了,变成了更简单的bool运算和bool值,那么我们可以考虑用同样的方法,即双栈,一个栈存储运算符,一个栈存储bool值。原创 2022-11-05 10:30:20 · 377 阅读 · 0 评论 -
LeetCode 754 到达终点数字[数学 贪心] HERODING的LeetCode之路
【代码】LeetCode 754 到达终点数字[数学 贪心] HERODING的LeetCode之路。原创 2022-11-04 00:45:40 · 203 阅读 · 0 评论 -
LeetCode 1662 检查两个字符串数组是否相等[数组] HERODING的LeetCode之路
【代码】LeetCode 1662 检查两个字符串数组是否相等[数组] HERODING的LeetCode之路。原创 2022-11-01 00:20:26 · 166 阅读 · 0 评论 -
LeetCode 907 子数组的最小值之和[单调栈] HERODING的LeetCode之路
【代码】LeetCode 907 子数组的最小值之和[单调栈] HERODING的LeetCode之路。原创 2022-10-28 09:47:33 · 167 阅读 · 0 评论 -
LeetCode 862 和至少为K的最短子数组[前缀和 双端队列] HERODING的LeetCode之路
【代码】LeetCode 862 和至少为K的最短子数组[前缀和 双端队列] HERODING的LeetCode之路。原创 2022-10-26 09:24:22 · 512 阅读 · 0 评论 -
LeetCode 915 分割数组[数组 双指针] HERODING的LeetCode之路
【代码】LeetCode 915 分割数组[数组 双指针] HERODING的LeetCode之路。原创 2022-10-24 00:30:02 · 570 阅读 · 0 评论 -
LeetCode 1235 规划兼职工作[动态规划 二分查找] HERODING的LeetCode之路
【代码】LeetCode 1235 规划兼职工作[动态规划 二分查找] HERODING的LeetCode之路。原创 2022-10-22 10:35:15 · 222 阅读 · 0 评论 -
LeetCode 901 股票价格跨度[栈] HERODING的LeetCode之路
【代码】LeetCode 901 股票价格跨度[栈] HERODING的LeetCode之路。原创 2022-10-21 08:35:47 · 210 阅读 · 0 评论 -
LeetCode 779 第K个语法符号[递归 找规律] HERODING的LeetCode之路
【代码】LeetCode 779 第K个语法符号[递归 找规律] HERODING的LeetCode之路。原创 2022-10-20 10:34:22 · 193 阅读 · 0 评论 -
LeetCode 886 可能的二分法[dfs] HERODING的LeetCode之路
【代码】LeetCode 886 可能的二分法[dfs] HERODING的LeetCode之路。原创 2022-10-16 00:32:18 · 258 阅读 · 0 评论