- 博客(23)
- 收藏
- 关注
原创 Leetcode-1750. 删除字符串两端相同字符后的最短长度
左侧跳过:while (s[l] == s[l - 1] && l <= r) l++(删除前缀的连续相同字符)。右侧跳过:while (s[r] == s[r + 1] && l <= r) r--(删除后缀的连续相同字符)。左侧跳过:s[1]=='a' 且 l<=r(1<=1),l++ → l=2(此时 l>r)。第二轮:l=1, r=2('b'=='b'),删除后 l=2, r=1(此时 l>r)。如果相同就向中心移动。第一轮:l=0, r=3('a'=='a'),删除后 l=1, r=2。
2025-06-18 16:32:05
881
原创 Leetcode-2537. 统计好子数组的数目
使用滑动窗口来维护子数组,并通过组合计数动态调整满足条件的数对数目。具体来说,我们维护一个窗口[l,r],使得窗口内相同元素的对数至少为 k,并计算这样的窗口数目。
2025-06-17 17:22:28
210
原创 Leetcode-713. 乘积小于 K 的子数组
维护一个窗口[l,r],代表以r为右端点的满足元素乘积小于k的最长子数组。此时数组长度就是以r为右端点的满足条件的子数组个数。mul记录窗口内容所有元素的乘积。当窗口右移的时候,更新乘积。如果乘积大于等于k,需要左移窗口来缩小乘积。
2025-06-17 17:13:06
323
原创 Leetcode-2799. 统计完全子数组的数目
由于子数组越长,越能满足题目要求,所以除了 [l,r],还有 [l−1,r],[l−2,r],…,[0,r] 都是满足要求的。为了计数,我们需要最大化l,也就是将l左移,在此过程中,不断计算cnt[nums[l]]的值,,这样才能更新哈希表的长度,也就是判断当前数组是否是完美子数组的依据。首先需要明确数组中的唯一值个数,通过插入集合后统计集合长度得到唯一值个数为k。维护一个窗口[l, r],遍历右端点。当遍历到r时,通过哈希表对元素进行计数,所有的元素作为起始节点的子数组,都满足右端点是r时是完全子数组。
2025-06-16 17:54:21
344
原创 Leetcode-2962. 统计最大元素出现至少 K 次的子数组
当 cnt >= k 时,收缩左指针 l 直到条件不再满足,此时所有起始位置 <= l 的子数组都满足条件,贡献 l+1 个有效子数组。右指针 r 扩展窗口,统计最大值出现的次数 cnt。
2025-06-16 17:08:14
167
原创 Leetcode-1358. 包含所有三种字符的子字符串数目
每次右指针移动后,累加左指针的位置 l 到结果 ans 中。这是因为对于当前右边界 r,所有以 l -1的位置为起点且以 r 为终点的子字符串都满足条件。:当窗口内包含所有三个字符时,收缩左指针 l 并更新字符频次,直到窗口不再满足条件。:使用左右指针 l 和 r 维护一个窗口,窗口内字符的频次由 cnt 记录。:右指针 r 不断右移,将字符加入窗口并更新频率。
2025-06-16 17:06:44
228
原创 Leetcode-3325. 字符至少出现 K 次的子字符串 I
更新结果:执行 ans += l。此时,l 的值表示以 r 结尾的子串中,满足条件的子串数量(即左端点 i < l 的子串 s[i..r] 都满足条件)。循环直到 cnt[s[r]] < k(即移除一个 s[r] 字符,使其计数低于 k)。将 s[r] 的计数 cnt[s[r]] 增加 1。减少 s[l] 的计数(即移除窗口左端字符)。左指针 l 右移(l++)。
2025-06-16 17:04:04
302
原创 Leetcode-1234. 替换子串得到平衡字符串
C++ 代码中 “先更新再收缩” 的核心是:当窗口外字符≤k 时,当前窗口一定是可行解,此时收缩左端点可能得到更短的窗口;若收缩后窗口外字符超过 k,说明[l, r]是满足条件的最小窗口(更短的窗口不存在);若仍满足条件,说明存在更短的窗口,继续收缩。假设k = n/4,窗口为[l, r],窗口外的字符频率为cnt[c](因为窗口内的字符会被替换,其频率不影响最终平衡)。右端点继续扩展时(r++),窗口外字符频率再次 - 1,可能重新满足条件,此时新的窗口[l, r+1]可能更短。
2025-06-12 22:04:11
559
原创 Leetcode-2904. 最短且字典序最小的美丽子字符串
直观可以知道,在结尾为s[r]的窗口中,只有开头和结尾都是'1',才能是最短长度。假设并未是1开头,而是0,此时如果窗口左端点向右移动,长度一定会更少,且不会影响窗口中'1'的个数。结尾必须为1的原理相同。在得到了结尾为s[r]的最短窗口t后,考虑是否更新ans。需要满足条件:长度更小或者长度相同但是字典序更小,也就是转换成条件:len(t) < len(ans) or len(t) == len(ans) and t < ans额外考虑:会返回空字符串的情况就是字符串中没有k个'1'。
2025-06-12 19:42:02
288
原创 Leetcode-209. 长度最小的子数组
当窗口中新加入一个nums[r]时,计入总和,若大于等于target,更新长度。此时为了满足窗口尽可能地小,需要在右端点不变地情况下,从左侧缩小窗口,更新长度,直到总和小于target,就可移动右端点,进行下一轮次的更新。通过指针l和r,维护一个窗口,这个尽可能小的窗口中元素之和应该大于等于target。
2025-06-12 15:22:21
243
原创 Leetcode-1838. 最高频元素的频数
在计算[L,R]时,已知[L,R-1]的操作次数,且nums[L,R-1]的值都为nums[R-1],此时需要将其中所有值都变为nums[R],增加的操作数是(nums[R]-nums[R-1])*(R-L)。再判断是否超过了k,如果超过,L需要向右移动,缩小窗口。此时我们就可以更新最大窗口长度,得到最终结果。首先需要对数组进行排序,为什么呢?排序后,我们需要维护一个窗口,这个。
2025-06-11 13:42:45
358
原创 Leetcode-2730. 找到最长的半重复子字符串 - 滑动窗口
滑动窗口。区间用[l,r]代表,如果第r+1与r位字符相等,说明新出现的一对相邻字符是相等的,此时如果之前存在相等的相邻字符需要从窗口中移除,通过s[l] == s[l+1]来判断是否移除了相邻字符。
2025-06-11 13:37:57
311
原创 【小程序开发0基础】黑马程序员微信小程序开发03
本文是笔者自己学习过程中的笔记,仅记录,如需参考,留赞自取即可。可能存在疏漏等,敬请指正。如有侵权,可联系删文。结合黑马程序员的视频和ppt更易理解。
2025-04-24 20:31:22
612
原创 Leetcode每日一题(25.04.23)
本题解仅作个人学习与技术交流,不构成技术指导或商业承诺。如有疏漏或更优解,欢迎评论区交流。如有侵权,联系删帖~
2025-04-23 22:43:26
432
原创 【小程序开发0基础】黑马程序员微信小程序开发02
本文是笔者自己学习过程中的笔记,仅记录,如需参考,留赞自取即可。可能存在疏漏等,敬请指正。如有侵权,可联系删文。结合黑马程序员的视频和ppt更易理解。如果有HTML/CSS/Javascript基础,了解过vue框架阅读会更加流畅。通过阅读本文可以快速掌握小程序开发基础,从页面渲染到网络请求全流程梳理!涵盖 WXML 数据绑定与事件处理、WXSS 样式语法、全局 / 页面配置优化及网络请求实战技巧,适合新手入门与开发者查漏补缺,助力高效构建小程序页面。
2025-04-21 21:12:25
1561
原创 【0基础】黑马程序员微信小程序开发01
介绍了小程序开发的入门,包括下载小程序开发软件以及整体文件组成的介绍。相对比网页开发的html,css,js,在小程序开发中类比文件的介绍。不涉及具体的开发代码,仅是结构框架的介绍
2025-04-20 23:04:07
485
原创 蓝桥杯刷题【23.11.10-23.11.12】
明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N ≤ 100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。接下来m行,每行2个数,分别代表蚂蚁的初始方向(0代表向左,1代表向右),蚂蚁的初始坐标x满足x为整数且0<x<n,蚂蚁走到坐标0或坐标n即代表离开小径。正常应该是2,3,5,7…第一行,2个整数n,m(1≤m<n≤100000,n,m均为整数),分别代表小径的长度,蚂蚁的数量。
2023-11-12 18:51:36
350
1
原创 香港酒店数据分析
数据读取import pandas as pdimport matplotlib.pyplot as pltimport numpy as np# 解决中文问题plt.rcParams['font.sans-serif'] = 'SimHei'# 读取数据df = pd.read_excel('./香港酒店数据.xlsx')print(df.head())# 删除第一行的空值df = df[1:]# 重置索引df.index = range(len(df))# 删除Un.
2021-11-27 22:48:11
2047
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅