- 博客(6)
- 收藏
- 关注
原创 [LeetCode每日一题]2332. 坐上公交的最晚时间
这段代码完成的是模拟操作, 我们按从早到晚的顺序遍历所有车辆, 并将能载走的乘客载走.c为车辆承载量, c小于0就说明这辆车已经满员了, 退出内层循环. j为当前要载的乘客, 当j大于passengers.size()时, 说明所有的乘客已被载走. passengers[j] <= t, t 为车辆到达时间, 因为先进行了排序, j所指的一定是当前最早的乘客, 如果passengers[j] > t, 说明车辆已经开走了, 我们可以直接退出内循环.本文本质上为本人对力扣题解区灵茶山艾符的题解的理解.
2024-09-19 00:41:22 292 1
原创 [LeetCode每日一题]2398. 预算内的最多机器人数目(使用deque维护数组中的最大值)
运用deque(双端队列)可以很轻松的解决(如上述代码).在这段代码中,较难理解的就是入队部分.为什么比chargeTimes[right]小的队尾出队之后就不要入队了呢,这样难道不会影响right左边的值进而影响最大值吗.注意啦注意啦,我们要维护的只是max(chargeTimes),如果chargeTimes[right]是区间内的最大值的话,在现在right所在的位置变为区间的左端点之前,区间的最大值是不会小于chargeTimes[right]的,我们可以将这部分理解为一个单调栈.
2024-09-13 22:21:36 252
原创 [LeetCode每日一题]2555. 两个线段获得的最多奖品
这样我们就完成了这道题的二分之一,剩下的就是解决如何找到另外一条线段的最大覆盖数,即长度为k的线段所能覆盖的次大奖品数.上面这段代码其实已经求出了在x轴上每个位置所能覆盖的最大奖品数(此位置指线段右端点位置),既然我们找到最大的线段,在这条线段之前的最大不就是次大的线段了吗.看题目条件,给定一个非递减数组表示奖品位置,求两条线段所能覆盖的最大奖品数.先将题目简化,假设只有一条线段,就变成的标准的滑动窗口题.在此基础上,我们要解决的就是求出再加一条线段所能覆盖的奖品数.
2024-09-11 20:34:17 188
原创 [LeetCode每日一题]2663. 字典序最小的美丽字符串
因为每次修改之后都会进行判断,把长回文串的出现扼杀在摇篮之中,这个判断条件就能一直有效的运行下去。i从后面开始也是神来之笔,既然要字典序最小,那从最后开始加就是最好的选择,进位之后i--,就是找到修改影响到的最左边的位置,判断完无最小回文串之后i++,进而检查后面的是否符合规律。由于回文串去掉首尾字母后,仍然是回文串,所以长为 mmm 的回文串必然包含长为 m-2 的回文串。这等价于(逆否命题)如果没有长为 m−2的回文串,那么也不会有长为 m 的回文串(这段描述来源于灵神的题解)
2024-06-22 19:39:37 402
原创 LeetCode30. 串联所有单词的子串
这种处理的方法是将s分成一个个符合words长度的单词(就简称为基本单位吧),先从下标为0的位置开始分割,那还有很多种分割方式没有考虑到啊,不急,再从下标为1的位置开始分割,如此重复,一直到完成从下标为words的长度 - 1的分割过程,当我们想继续分割的时候,欸~,已经完成一个周期了,在分下去就是从下标为1的位置开始分割除去第一个基本单位的模样了,那自然就不用考虑了呀。因为给定单词长度都是相等的,一开始就想把s按单词长度分割,用哈希表比对。被这道题卡了很久,现在过了,把思路整理一下。
2024-06-20 20:29:26 418
原创 关于KMP算法中next数组的理解
j初始化为0是为了方便 回跳 和 对ne[i]进行赋值(此模板的ne[i]是指在模板串中第1位到第i位的最长相等前后缀)如果j初始化为1(此处指同时修改构造时的逻辑保证数组能正常构造),在回跳过程中需使j = ne[ j - 1 ],在逻辑上不太方便理解(在我看来,正推是比逆推简单的)。根据递推的思想,我们回跳至的等效位置一定是最靠近的一个等效位置,所以这样判断就可以节约一定的时间。next数组的构建无疑是KMP算法的难点,本人的疑惑大多都是在试图理解如何构建next数组的过程中产生的。
2024-03-24 21:15:44 501
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人