
zy开扣
爱学习的橙子羊
这个作者很懒,什么都没留下…
展开
-
LCR180.文件组合
LCR180.文件组合。原创 2025-01-30 17:34:49 · 131 阅读 · 0 评论 -
187.重复的DNA序列
代码实现时,可以一边遍历子串一边记录答案,为了不重复记录答案,我们只统计当前出现次数为 2 的子串。用一个哈希表统计 s 所有长度为 10 的子串的出现次数,返回所有出现次数超过 10 的子串。3.哈希值等于2时是该子串第一次重复出现,记录到结果中。1.for循环遍历长度为10的子串,通过。2.记录此时子串到哈希表中。原创 2025-01-30 17:22:41 · 150 阅读 · 0 评论 -
438.找到字符串中所有字母异位词
如果cnts的更大说明出现了p中没有的字符 或者某个字符数量超了,这时需要移动左窗口。使用两个size为26的数组记录p中每个字母出现的次数和遍历时子串的次数。(3)移动左窗口:先算出窗口左边界字符串对应的index 即。,在cnts中减1这个index对应的数量,left++移动。(4)当窗口长度刚好和p的size相等时即可记录结果。2.定义窗口左边界初始值为0,for循环遍历右边界。1.遍历p,更新p的字母次数。原创 2025-01-30 17:11:19 · 171 阅读 · 0 评论 -
264.丑数II
2.每次从队列取出最小值 x,然后将 x 所对应的丑数 2x、3x 和 5x 进行入队。为了防止同一丑数多次进队,我们需要使用哈希表(数据结构 set )来记录入过队列的丑数。3.对步骤 2 循环多次,第 n 次出队的值即是答案。1.将最小丑数 1 放入队列。原创 2025-01-30 16:36:30 · 198 阅读 · 0 评论 -
LCR159.库存管理III
【代码】LCR159.库存管理III。原创 2025-01-30 16:35:24 · 177 阅读 · 0 评论 -
347.前k个高频元素
开始,向上调整堆。原创 2025-01-30 01:59:22 · 269 阅读 · 0 评论 -
215.数组中第k大的元素
开始,向上调整堆。原创 2025-01-30 00:35:15 · 574 阅读 · 0 评论 -
79.单词搜索
(2)搜索下一单元格:朝当前元素的上、下、左、右四个方向开启下层递归。修改为空字符’’,代表此元素已访问过,防止之后搜索时重复访问。递归四个方向的,如果一个方向相邻的不相等,后面的都不用看了。(1)行列索引越界,字符不匹配,返回false;(2)字符串全部匹配,返回true。(1)标记当前矩阵元素:将。(3)还原当前矩阵元素:将。元素还原至初始值,即。原创 2025-01-19 02:54:20 · 124 阅读 · 0 评论 -
131.分割回文串
(1)判断[start,i]是否是回文串,不是就continue。1.需要一个判断当前子串是不是回文串的函数,使用双指针。(2)如果是回文串,记录到tmp,移动start,递归。2.回溯遍历i,从start开始,原创 2025-01-19 02:53:41 · 289 阅读 · 0 评论 -
20.有效的括号
1.使用一个哈希表key为右括号,用于后续判断当前碰到的是否是右括号+通过value判断是否有匹配左括号。2.过程:将当前字符到map中查找,碰到左括号入栈,碰到右括号比较value与栈顶元素。如果相等就匹配了一对括号,左括号出栈,不等就returnfalse。最终结果需要判断栈是否为空,如果栈没空说明有剩下未匹配的左括号。原创 2025-01-19 02:53:10 · 185 阅读 · 0 评论 -
20.有效的括号
1.使用一个哈希表key为右括号,用于后续判断当前碰到的是否是右括号+通过value判断是否有匹配左括号。2.过程:将当前字符到map中查找,碰到左括号入栈,碰到右括号比较value与栈顶元素。如果相等就匹配了一对括号,左括号出栈,不等就returnfalse。最终结果需要判断栈是否为空,如果栈没空说明有剩下未匹配的左括号。原创 2025-01-19 02:51:27 · 123 阅读 · 0 评论 -
LCR191.按规则计算统计结果
【代码】LCR191.按规则计算统计结果。原创 2025-01-19 02:49:49 · 154 阅读 · 0 评论 -
560.和为k的子数组
所以和为k的子数组个数=当前preSum能切掉几个不同和为的preSum-k的数组。和为k的子数组=和为preSum的数组切掉和为preSum-k的数组后剩下的部分。2.更新结果,看这个位置的preSum能切掉几个preSum-k。1.计算每一个位置的preSum。3.更新preSum哈希表。原创 2025-01-19 02:49:04 · 120 阅读 · 0 评论 -
93.复原ip地址
需要一个pointNum记录已经添加的点的数量,如果已经有三个点,就判断剩余部分是否合法,合法就加入结果集。需要一个start记录当前开始的起点,通过枚举i来遍历start到i的长度。将过程看作向字符串中添加三个".“,并枚举三个”."出现的位置。递归终止条件:有三个点且有剩余部分且剩余部分合法加入结果集。2.非数字字符不合法。3.大于255不合法。原创 2025-01-19 02:48:25 · 428 阅读 · 0 评论 -
22.括号生成
任意前缀中左括号数量一定>=右括号数量,因此,如果左括号数量不大于n,我们就可以放一个左括号,来等待一个右括号来匹配。如果右括号数量小于左括号的数量,我们就可以放一个右括号,来使一个右括号和一个左括号相匹配。这两个不冲突,都需要回溯。原创 2025-01-19 02:47:56 · 130 阅读 · 0 评论 -
78.子集
【代码】78.子集。原创 2025-01-19 02:45:44 · 127 阅读 · 0 评论 -
77.组合
【代码】77.组合。原创 2025-01-19 02:45:00 · 83 阅读 · 0 评论 -
54.螺旋矩阵
2.其次向右移动到最右,此时第一行因为已经使用过了,可以将其从图中删去,体现在代码中就是重新定义上边界。4.若上下边界不交错,则遍历还未结束,接着向下向左向上移动,操作过程与第一,二步同理。3.判断若重新定义后,上下边界交错,表明螺旋矩阵遍历结束,跳出循环,返回答案。5.不断循环以上步骤,直到某两条边界交错,跳出循环,返回答案。1.设定上下左右边界。原创 2025-01-19 02:21:06 · 171 阅读 · 0 评论 -
46.全排列 && 47.全排列II
1.回溯终止条件:结果的size=nums的size2.使用一个标记数组记录哪些数据是被用了的3.遍历nums,如果元素已经访问过就跳过4.元素未访问过,向一个排列中添加,标记已使用,继续向下遍历(递归),最后撤销回溯,标记未使用。原创 2025-01-19 02:20:32 · 268 阅读 · 0 评论 -
39.组合总和 && 40.组合总和II
组合问题可以抽象为树形结构,那么“使用过”在这个树形结构上是有两个维度的,一个维度是同一树枝上使用过,一个维度是同一树层上使用过。回看一下题目,元素在同一个组合内是可以重复的,怎么重复都没事,但两个组合不能相同。那么问题来了,我们是要同一树层上使用过,还是同一树枝上使用过呢?原创 2025-01-19 02:19:58 · 396 阅读 · 0 评论 -
153.寻找旋转排序数组中的最小值
1.二分后mid和最后一个比大小(重要且必须)(1)mid更大,说明mid和mid左侧都是有序的,此时最小值出现在mid右侧,left=mid+1(2)mid小,说明mid和mid右侧都是有序的,此时最小值出现在mid或者mid左侧,right=mid2.left==right时结束循环,返回nums[left]原创 2025-01-12 18:24:02 · 120 阅读 · 0 评论 -
56.合并区间
1.sort排序nums2.外层i遍历区间,内层j遍历i+1开始的区间记录一个maxEnd,为能合并的区间的最右侧端点值比较j的左端点与之前的右端点(maxEnd),(1)小于等于就是能合并的连续区间,更新maxEnd,移动j看下一个区间(2)大于时循环结束,此时j的位置为下一个可合并区间的第一个元素,记录结果,移动i到j。原创 2025-01-12 18:23:31 · 211 阅读 · 0 评论 -
33.搜索旋转排序数组
数组是部分有序的也可以使用二分法,改题目每次二分必会最少产生一个有序部分1.设置一个mid,然后看mid左侧和右侧哪个是有序数组2.利用有序的一侧判断target是否在这个闭区间,如果在就继续二分查找,如果不在,下一次二分非有序的部分。原创 2025-01-12 18:22:53 · 187 阅读 · 0 评论 -
31.下一个排列
标准的 “下一个排列” 算法可以描述为:1.从后向前 查找第一个 相邻升序 的元素对(i,j),满足。此时[j,end)必然是降序2.在[j,end)从后向前 查找第一个满足的k。3.将A[i]与A[k]交换4.可以断定这时[j,end)必然是降序,逆置[j,end),使其升序5.如果在步骤 1 找不到符合的相邻元素对,说明当前为一个降序顺序,则直接跳到步骤 4。原创 2025-01-12 18:22:22 · 143 阅读 · 0 评论 -
1 .两数之和
1.用哈希表存储数组,key为nums[i] value为index2.再次遍历数组,看哈希表中是否有target-nums[i]原创 2025-01-12 18:19:41 · 196 阅读 · 0 评论 -
15.三数之和 2
(1)``nums[i]+nums[j]+nums[k]==0`此时记录结果,移动jk,然后对jk去重。(1)``nums[i]+nums[j]+nums[k]>0`此时双指针k偏大,左移动。(2)``nums[i]+nums[j]+nums[k]<0`此时双指针j偏小,右移动。2.外层for遍历i,并对i去重。3.内层while双指针j k。原创 2025-01-12 09:42:26 · 337 阅读 · 0 评论 -
876.链表的中间结点
fast==nullptr时 slow刚好是中间。原创 2025-01-12 09:14:39 · 369 阅读 · 0 评论 -
328.奇偶链表
328.奇偶链表思路:注意不是奇数偶数值的结点大概画个图交替连上进行class Solution {public: ListNode* oddEvenList(ListNode* head) { if(head==nullptr) return nullptr; ListNode* odd=head; //奇数位置的头 ListNode* even=head->next; //偶数位置的头 ListNode* eve原创 2025-01-12 09:14:08 · 413 阅读 · 0 评论 -
92.反转链表II & 206.反转链表
定义三个指针pre和cur和tmptmp暂时记录cur->next,因为反转时cur的next指针会指向pre,不记录后半段就访问不到了。原创 2025-01-11 01:25:43 · 277 阅读 · 0 评论 -
138.随机链表的复制
1.遍历原链表+创建新结点,放入hash2.遍历原链表,给新结点添加next和random指针。原创 2025-01-11 01:25:12 · 364 阅读 · 0 评论 -
143.重排链表
2.从slow结点分出后半部分再reverse,slow->next是新的头。链表分成前后两部分,后半部分反转,再一起穿插放入新链表。1.遍历链表找链表的终点(快慢指针)3.双指针遍历两个链表。原创 2025-01-11 01:24:41 · 233 阅读 · 0 评论 -
2.两数相加 2
1.遍历两个链表,记录长度2.给较短的链表高位补03.设置flag记录进位4.遍历两个链表,对value进行相加并记录进位设置一个dummy节点来避免头结点的特殊处理(最后返回结果为dummy->next)遍历时每次先计算sum,创建next结点并赋值,判断是否有进位,三个指针移动到next5.最高位相加若还有进位再创建一个结点。原创 2025-01-11 01:24:09 · 216 阅读 · 0 评论 -
86.分隔链表
新建两个dummy结点来记录大小部分的链表。原创 2025-01-11 01:22:40 · 209 阅读 · 0 评论 -
83.删除排序链表中的重复元素 & 82.删除排序链表中的重复元素II
思路:设置一个pre,首先指向dummy,cur指向head1.pre和cur相等时,pre->next=cur->next;原创 2025-01-11 01:21:48 · 376 阅读 · 0 评论 -
160.相交链表
ab两个链表进行拼接抵消长度差a第一次走完接上b,b第一次走完接上a最终会同时遍历到末尾。原创 2025-01-11 01:21:13 · 608 阅读 · 0 评论 -
234.回文链表
1.一次遍历记录链表的值到数组中2.数组头尾双指针开始判断。原创 2025-01-07 23:26:40 · 236 阅读 · 0 评论 -
209.长度最小子数组
1.移动右边界,增大窗口,累加sum2.如果一旦sum>target,移动左边界,缩小窗口,直到sum<target。原创 2025-01-07 23:26:10 · 259 阅读 · 0 评论 -
141.环形链表 & 142.环形链表II
哈希表同前,数学推导见下图,原创 2025-01-07 23:25:41 · 536 阅读 · 0 评论 -
3.无重复字符的最长子串 2
在 C++ 中,std::unordered_map 是一个实现的关联容器,用于存储键值对。要在 std::unordered_map 变量中查找特定的键,可以使用 find()。find() 函数返回一个,指向要查找的键值对。原创 2025-01-04 00:44:48 · 157 阅读 · 0 评论 -
26.删除有序数组的重复项
快慢指针 有点类似283.移动零。原创 2025-01-04 00:43:08 · 111 阅读 · 0 评论