算法
记录Leetcode刷题过程
惊鸿.Jh
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
高频SQL50题(基础版)解析(I)
注意:非聚合列(出现在查询语句中,但未被聚合函数处理)必须出现在group by语句中。两表左值连接后在子视图中查询,并根据customer_id分组,最后计数。此题也可用左值连接,因为两表存在外键约束,不会出现null。1.先内连接找到同一组机器的同一个进程,并按机器分组聚合。2.然后使用聚合函数avg求每组的平均数,并起别名。round函数,IFNULL函数,avg聚合函数。两表左外连接(需要左表全部数据)三表笛卡尔积、左外连接、聚合函数。单表内连接(笛卡尔积)单表内连接、聚合函数。原创 2025-12-16 17:32:41 · 257 阅读 · 0 评论 -
503. 下一个更大元素 II
摘要 该问题要求找出循环数组中每个元素的下一个更大元素。通过使用单调栈和索引取余的技巧,可以高效解决。具体方法是将数组遍历两次(通过索引取余模拟),使用单调栈存储元素索引而非值,以避免重复元素的覆盖问题。第一次遍历处理常规情况,第二次遍历处理需要循环搜索的情况。例如对于输入[1,2,1],输出为[2,-1,2],其中第二个1通过循环搜索找到下一个更大的2。这种方法的时间复杂度为O(n),空间复杂度为O(n)。原创 2025-12-02 21:57:45 · 223 阅读 · 0 评论 -
496. 下一个更大元素 I
摘要:该算法解决"下一个更大元素"问题,即在nums2中为nums1的每个元素寻找右侧第一个更大的值。使用单调栈从右向左遍历nums2,维护递减序列,并用哈希表记录每个元素对应的结果。对于nums1中的每个元素,直接从哈希表获取结果。时间复杂度O(m+n),空间复杂度O(n),其中m和n分别为nums1和nums2的长度。示例:输入nums1=[4,1,2], nums2=[1,3,4,2],输出[-1,3,-1]。原创 2025-12-01 14:20:49 · 140 阅读 · 0 评论 -
3542. 将所有元素变为 0 的最少操作次数
根本原因是出现了递减分布。每次递减出现时应当重置单调栈(当前操作必定无法与之前可能的等价情况一起处理)。你的任务是对该数组执行若干次(可能为 0 次)操作,使得。根据示例我们可知,最小操作次数只与初始排布有关。每次递增时,说明有新的值需要操作。4.合并2+3:分割操作与分布单调性有关系。1,2,1,2 :三次操作。1,1,2,2:两次操作。在一次操作中,你可以选择一个子数组。3.每次操作将当前最小值设置为0.1.每次操作尽可能选更长的子数组。返回使整个数组变为 0 所需的。是数组中的一段连续元素。原创 2025-11-15 19:35:34 · 189 阅读 · 0 评论 -
380. O(1) 时间插入、删除和获取随机元素
该文介绍了一个使用哈希表实现RandomizedSet类的解决方案。该类支持O(1)时间复杂度的插入、删除和随机获取元素操作。核心实现使用unordered_set存储元素,insert()和remove()方法通过查找集合判断元素是否存在并执行相应操作。getRandom()方法通过随机数生成器选择元素,但文中实现存在效率问题(advance()操作时间复杂度为O(n))。建议改进为使用vector+哈希表的组合来实现真正的O(1)随机访问。原创 2025-09-22 18:25:17 · 140 阅读 · 0 评论 -
3005. 最大频率元素计数
这篇文章介绍了如何计算数组中所有出现频率最高的元素的总出现次数。主要思路是:首先使用哈希表统计每个元素的出现频率并记录最大频率值,然后遍历哈希表将所有具有最大频率的元素的频率值相加。关键点在于处理可能有多个元素同时具有相同最大频率的情况。该算法的时间复杂度为O(n),空间复杂度为O(n)。示例代码展示了如何用C++实现这一功能,包括使用unordered_map统计频率和累加最大频率值的步骤。原创 2025-09-22 17:57:22 · 196 阅读 · 0 评论 -
274. H 指数
这篇文章摘要介绍了如何计算科研人员的h指数,即至少有h篇论文被引用h次以上的最大数值。通过将论文引用次数排序后,从高到低遍历,统计满足引用次数大于当前h值的论文数量,当数量不再增加时即得到最大h指数。算法时间复杂度为O(nlogn)(排序)+O(n)(遍历),空间复杂度为O(1)。这是一种通过排序后线性扫描的高效解决方案。原创 2025-09-21 19:51:35 · 191 阅读 · 0 评论 -
3484. 设计电子表格
该代码实现了一个电子表格类Spreadsheet,支持以下功能:1) 初始化指定行数的26列表格(值初始为0);2) 通过setCell设置单元格值;3) 通过resetCell重置单元格为0;4) 通过getValue计算"=X+Y"形式的公式,其中X/Y可以是单元格引用或数字。主要方法包括解析单元格位置(getPos)和获取值(getCellVal)。表格数据存储在二维vector中,行号从1开始,列号对应字母A-Z。未设置的单元格默认为0。原创 2025-09-19 17:38:44 · 219 阅读 · 0 评论 -
3408. 设计任务管理器
该摘要描述了一个任务管理器系统的设计与实现。系统使用哈希表存储任务信息(taskId为键),优先队列维护任务优先级。关键操作包括:初始化时批量添加任务;添加新任务时更新哈希表和队列;修改任务优先级时在队列中添加新记录;删除任务时仅从哈希表移除;执行最高优先级任务时,从队列中弹出元素直到找到哈希表中有效匹配的任务。这种"延迟删除"策略减少了队列维护开销,确保高效操作。当队列顶部的任务在哈希表中存在且优先级匹配时,视为有效任务并执行删除。原创 2025-09-18 11:10:31 · 290 阅读 · 0 评论 -
1935. 可以输入的最大单词数
摘要 该算法用于统计在部分键盘按键损坏的情况下,能够完全输入的单词数量。通过哈希集合存储损坏按键,遍历文本中的每个字符:遇到损坏字符标记当前单词为不可输入,遇到空格时检查并统计完好单词。时间复杂度为O(n),其中n是文本长度,空间复杂度为O(1)(损坏按键数量有限)。原创 2025-09-15 10:19:06 · 122 阅读 · 0 评论 -
3227. 字符串元音游戏
摘要:该问题描述小红和小明轮流移除字符串中特定元音数量的子字符串的游戏。分析表明,当字符串中元音总数为奇数或偶数(非零)时,先手的小红总能获胜;若元音总数为零,则小红失败。解决方案通过统计元音数量,只需判断是否存在元音即可确定胜负。时间复杂度为O(n),空间复杂度为O(1)。原创 2025-09-12 12:08:24 · 228 阅读 · 0 评论 -
2785. 将字符串中的元音字母排序
摘要:题目要求对字符串中的元音字母按ASCII值非递减排序,同时保持辅音字母位置不变。通过使用ASCII码字典统计元音出现次数,遍历字符串时按ASCII顺序填充元音,避免了复杂的逻辑判断,显著减少代码量。关键点在于利用ASCII数组直接索引访问,代替传统哈希表的查找操作,提升效率。原创 2025-09-11 09:40:00 · 217 阅读 · 0 评论 -
1733. 需要教语言的最少人数
本文解决了一个社交网络中的语言沟通问题,要求确定最少需要教会多少用户一门语言,使得所有好友能够相互沟通。解题步骤:1) 首先找出所有无法沟通的好友对;2) 统计这些用户中每种语言的掌握人数;3) 选择最流行的语言,计算需要额外教授的用户数。通过哈希表统计语言使用情况,最终结果即为无法沟通用户总数减去该语言的使用人数。算法时间复杂度主要取决于好友关系和语言集合的遍历。原创 2025-09-10 20:21:55 · 226 阅读 · 0 评论 -
二维前缀和
该代码实现了一个二维矩阵的区域和查询功能。通过构建前缀和数组S,其中S[i][j]表示从(0,0)到(i-1,j-1)的子矩阵和。查询时利用公式S[row2+1][col2+1]-S[row2+1][col1]-S[row1][col2+1]+S[row1][col1]快速计算任意矩形区域的元素和。前缀和数组多开一行一列以简化边界处理,将原本O(nm)的查询优化为O(1)时间复杂度。原创 2025-09-10 20:01:21 · 192 阅读 · 0 评论 -
[3355. 零数组变换 I
该问题要求通过一系列查询操作将整数数组 nums 转换为零数组。每个查询 queries[i] = [li, ri] 允许在 nums 的下标范围 [li, ri] 内选择一个子集,并将选中下标对应的元素值减1。最终判断是否可以通过这些操作将 nums 的所有元素变为0。解决方案使用差分数组技术,通过记录每个查询对数组的影响,最终还原出每个位置的操作次数。如果某个位置的操作次数小于其初始值,则无法将其变为0,返回 false;否则返回 true。该方法的时间复杂度为 O(n + m),其中 n 是数组长度,原创 2025-05-21 13:53:51 · 352 阅读 · 0 评论 -
【双指针】5. 最长回文子串
思路:确定中心位置,向左右扩散。中最长的 回文 子串。原创 2025-05-06 15:54:35 · 247 阅读 · 0 评论 -
[字符处理]1812. 判断国际象棋棋盘中一个格子的颜色
给定坐标一定代表国际象棋棋盘上一个存在的格子。坐标第一个字符是字母,第二个字符是数字。,它是一个字符串,表示国际象棋棋盘中一个格子的坐标。下图是国际象棋棋盘示意图。如果所给格子的颜色是白色,请你返回。,如果是黑色,请返回。原创 2025-05-06 14:40:15 · 184 阅读 · 0 评论 -
【哈希表】1399. 统计最大组的数目
的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。请你统计每个组中的数字数目,并返回数字数目并列最多的组有多少个。MaxVal维护最大数位和长度。判定最大数位和长度的组数。原创 2025-04-23 23:05:21 · 213 阅读 · 0 评论 -
【二分查找】2563. 统计公平数对
数对满足以下情况,则认为它是一个。适用于离散程度较大的数据。思路1:排序+二分查找。适用于连续性较好的数据。思路二:哈希表+遍历。原创 2025-04-20 11:57:57 · 380 阅读 · 0 评论 -
[滑动窗口]209. 长度最小的子数组
滑动窗口,滑动右窗口,满足条件的状况下,收缩窗口。如果不存在符合条件的子数组,返回。找出该数组中满足其总和大于等于。个正整数的数组和一个正整数。原创 2025-04-18 21:01:32 · 272 阅读 · 0 评论 -
【哈希表】825. 适龄的朋友
3.在每个区间中遍历,对能发的两个年龄进行相乘,并累加(注意:相同年龄值互发时要减去自己给自己发的数量,即record[i])2.从后向前遍历,确定一组能发送的年龄段范围(从后向前遍历可以简化发送条件,只用判定左边区间是否大于右区间的一半+7即可)产生的好友请求为 110 -> 100 ,120 -> 110 ,120 -> 100。产生的好友请求为 17 -> 16 ,18 -> 17。另外,用户不会向自己发送好友请求。返回在该社交媒体网站上产生的好友请求总数。2 人互发好友请求。原创 2025-04-15 21:02:23 · 218 阅读 · 0 评论 -
【暴力求解】1534. 统计好三元组
请你统计其中好三元组的数量。先从左右两端确定i、k位置,在从中间遍历。满足下列全部条件,则认为它是一个。原创 2025-04-14 17:38:30 · 257 阅读 · 0 评论 -
[子集问题] 找出所有子集的异或总和再求和
2.遍历每个子集,求出异或和,汇总。定义为数组中所有元素按位。,计算并返回这些值相加之。1.先找出元素所有子集。原创 2025-04-05 16:18:03 · 235 阅读 · 0 评论 -
【滑动窗口】长度为 K 的子数组的能量值 I
2.每个子数组内依次滑动,记录满足递增的最大值。当条件不满足时,记录最大值为-1,并跳出当前子数组滑动窗口。1.总共子数组数量(窗口数量)为n-k+1;解题思路:滑动窗口。原创 2025-04-03 18:02:19 · 200 阅读 · 0 评论 -
【dp】有序三元组中的最大值 I
1.记录i位置前的最大值与i位置后的最大值,依次遍历数组i,得到每个位置的最大前后缀。2.再遍历一遍数组,带入公式,求出目标最大值。虽然不难,但题解很巧妙,值得反复品味。这题解当有dp思想。原创 2025-04-02 22:55:12 · 198 阅读 · 0 评论 -
【动态规划】不同路径
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。2.确定状态转移方程:dp[i][j]=dp[i-1][j]+dp[i][j-1]1.确定dp数组含义:dp[i][j]为当前走到i,j位置的路径数量。3.初始化:第1行与第一列全为1,及走到那个位置的方法有一种。网格的左上角 (起始点在下图中标记为 “Start” )。问总共有多少条不同的路径?原创 2025-03-31 17:00:02 · 222 阅读 · 0 评论 -
反转链表的两种实现
【代码】反转链表的两种实现。原创 2023-05-02 17:25:22 · 93 阅读 · 0 评论 -
LeetCode 206反转链表
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。输入:l1 = [7,2,4,3], l2 = [5,6,4]你可以假设除了数字 0 之外,这两个数字都不会以零开头。对于逆序处理,首先想到使用栈。输出:[7,8,0,7]转载 2023-05-02 17:07:05 · 142 阅读 · 0 评论 -
Hash表解决字符串匹配
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。通过数组模拟哈希表,先遍历后串,通过-'a'对串中字符计数,再遍历前串,相同时减去对应key的计数,若小于0则说明前串无法覆盖后串。链接:https://leetcode.cn/problems/ransom-note。著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。如果可以,返回 true;否则返回 false。来源:力扣(LeetCode)原创 2022-12-30 23:40:31 · 382 阅读 · 0 评论 -
滑动窗口算法
例题 3. 无重复字符的最长子串难度中等给定一个字符串 ,请你找出其中不含有重复字符的 最长子串 的长度。class Solution {public: int lengthOfLongestSubstring(string s) { // 哈希集合,记录每个字符是否出现过 unordered_set occ; int n = s.size(); // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始......转载 2022-06-07 17:43:04 · 164 阅读 · 1 评论
分享