- 博客(59)
- 收藏
- 关注
原创 LeetCode Hot100 下一个排列
本文介绍了如何找到整数数组的下一个字典序更大的排列。算法步骤如下:1)从右往左找第一个下降的位置i;2)若找不到则反转整个数组;3)否则从右往左找第一个大于nums[i]的元素nums[j]并交换;4)最后反转i+1到末尾的部分使其升序。该方法时间复杂度O(n),空间复杂度O(1),原地修改数组。示例展示了如何将[1,2,3]变为[1,3,2]等排列变换。
2025-11-26 11:33:11
171
原创 LeetCode Hot100 划分字母区间
给你一个字符串 s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。例如,字符串 “ababcc” 能够被分为 [“abab”, “cc”],但类似 [“aba”, “bcc”] 或 [“ab”, “ab”, “cc”] 的划分是非法的。题目地址:https://leetcode.cn/problems/partition-labels/description/注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。
2025-11-24 14:50:57
132
原创 Kaggle 下载依赖报错
在Kaggle下载依赖时若出现报错,可能是由于Kaggle网络未开启导致的。Kaggle平台需要手动开启互联网功能才能访问外部资源。解决方法:进入Notebook设置,开启"Internet"开关后重新运行代码即可正常下载依赖包。此功能默认关闭以保证计算环境安全。
2025-11-23 19:39:51
199
原创 LeetCode 可被三整除的最大和
本文提出了一种解决LeetCode问题"最大可被三整除的和"的算法。算法首先计算数组所有元素的总和sum及其模3余数mod。当mod为0时直接返回sum;否则,根据mod值寻找需要移除的最小元素组合:若mod为1,则寻找余1的最小元素或两个余2的最小元素之和;若mod为2,则寻找余2的最小元素或两个余1的最小元素之和。通过比较这些组合的最小值,从sum中减去该值得到最终结果。算法时间复杂度为O(n),空间复杂度为O(1)。
2025-11-23 14:47:32
99
原创 LeetCode Hot100 柱状图中最大的矩形
题目:柱状图中最大的矩形(LeetCode 84) 摘要:给定一个整数数组表示柱状图的高度,求能勾勒出的最大矩形面积。使用单调栈算法,维护栈中元素单调递增。遍历时遇到较小高度则出栈计算面积:当前高度乘以左右边界距离。遍历后处理栈中剩余元素,右边界为数组末尾。时间复杂度O(n),空间复杂度O(n)。核心思路是利用单调栈高效确定每个柱子的左右边界,从而计算可能的最大矩形面积。
2025-11-19 16:32:29
65
原创 LeetCode Hot100 每日温度
摘要: 本文介绍了LeetCode上"每日温度"问题的解决方案。给定一个温度数组,要求计算每天需要等待多少天后会出现更高温度。使用单调栈算法,栈中存储温度下标。遍历数组时,若当前温度高于栈顶温度,则计算天数差并出栈;否则将当前温度下标入栈。这种方法时间复杂度为O(n),空间复杂度为O(n)。给出的Go语言实现清晰地展示了如何使用单调栈来解决该问题。
2025-11-19 16:31:01
344
原创 LeetCode 分割数组的最大值
该题目要求在给定非负整数数组nums和整数k的情况下,将数组分成k个连续子数组,使得各子数组和的最大值最小。解题思路采用二分查找法:左边界为数组最大值,右边界为数组元素总和。通过二分查找确定一个中间值sum,验证能否将数组分成不超过k个子数组且每个子数组和不超过sum。若能满足则缩小右边界,否则增大左边界,直至找到最小的最大和。辅助函数splitBinary用于验证当前sum是否满足条件。最终返回的右边界即为所求的最小最大和。
2025-11-18 11:35:18
113
原创 LeetCode 爱吃香蕉的珂珂
该题目要求找出珂珂在规定时间内吃完所有香蕉的最小进食速度。解题思路是采用二分搜索法:首先确定速度的上下界(1到最大香蕉堆数量),然后对速度区间进行二分查找。对于每个中间速度值,计算吃完所有香蕉所需的时间,若时间超过规定则增大速度,否则减小速度。通过不断调整边界,最终找到能在规定时间内吃完香蕉的最小整数速度。时间复杂度为O(n log m),其中n为香蕉堆数,m为最大堆的香蕉数。
2025-11-17 15:20:05
369
原创 LeetCode 供暖器
摘要:该LeetCode问题要求在一条直线上为房屋和供暖器寻找最小加热半径,使得所有房屋都能被覆盖。解题思路是:首先对房屋和供暖器位置排序;然后遍历每个房屋,寻找其与最近供暖器的最小距离;最后在所有最小距离中取最大值作为结果。Go实现通过双指针优化,时间复杂度为O(nlogn + mlogm)。关键点在于对两数组排序后,利用贪心算法寻找每个房屋的最优供暖器,最终确定全局最小加热半径。
2025-11-16 15:11:55
140
原创 LeetCode Hot100 缺失的第一个正数
这篇文章介绍了一个寻找未排序数组中缺失最小正整数的算法。通过原地交换元素将每个正整数放到其正确位置(nums[i]=i+1),算法能在O(n)时间复杂度和常数空间内完成。主要思路是:当元素在有效范围内且不在正确位置时进行交换;若元素超出范围或重复则移到数组末端。最终遍历完成后,首个不满足nums[i]=i+1的位置即为缺失的最小正整数。该解法巧妙利用了数组本身作为哈希表,避免了额外空间的使用。
2025-11-16 15:09:30
234
原创 LeetCode 救生艇
摘要: 该问题要求计算承载所有人员所需的最小船数(每船最多载两人,重量不超过limit)。解决方法是先对人员体重数组排序,然后使用双指针策略:左指针指向最轻的人,右指针指向最重的人。如果两人重量之和超过limit,则重者单独乘船;否则两人同乘一艘船。每次操作后移动指针并增加船数,直到所有人被承载。时间复杂度为O(nlogn)(排序),空间复杂度O(1)。
2025-11-15 11:15:19
201
原创 LeetCode Hot100 接雨水
该题解使用双指针法计算柱状图中可接的雨水量。主要思路是:对每个位置计算其左右两侧的最大高度,该位置能接的雨水量等于左右最大高度的较小值减去当前高度。解法分为两种实现:1)预处理左右最大高度数组;2)优化版双指针法,使用两个变量动态维护左右最大高度。两种方法的时间复杂度均为O(n),但第二种方法空间复杂度优化至O(1)。关键点在于理解每个位置的水量由左右最高柱中的较小值决定,并合理利用双指针减少空间使用。
2025-11-15 11:04:46
352
原创 LeetCode 子矩阵元素加1
本文解决了LeetCode上的矩阵区域增量问题,使用二维差分数组优化子矩阵频繁更新操作。算法通过差分数组记录更新范围,最后通过前缀和计算还原最终矩阵。具体实现包含三个函数:add在差分数组上标记更新区域,build通过前缀和还原矩阵,rangeAddQueries整合流程处理所有查询。这种方法将每次子矩阵更新的时间复杂度优化到O(1),整体复杂度为O(n² + q),其中n是矩阵维度,q是查询次数,显著提高了大规模矩阵更新的效率。
2025-11-14 11:14:53
166
原创 LeetCode 加油站
LeetCode加油站问题要求判断能否从某个加油站出发绕环路一周。解题思路是统计总油量差值(total),若total<0则无解;否则维护当前剩余油量(sum),若sum<0则重置起点。算法复杂度O(n),关键点在于通过油量差值和贪心策略确定唯一可行起点。代码用Go实现,遍历数组计算油量差值并动态调整起点,最终返回可行起点或-1。
2025-11-14 11:05:01
153
原创 LeetCode N皇后(Hot 100)
摘要: 该问题要求在n×n棋盘上放置n个皇后,使其互不攻击(不在同一行、列或斜线)。使用回溯算法逐行尝试放置皇后,通过check函数验证位置合法性(检查列和对角线冲突),合法则递归处理下一行。当完成所有行(i == n)时,调用generate生成棋盘布局(用'Q'和'.'表示皇后和空位),并将解存入结果集。算法时间复杂度为O(n!),空间复杂度O(n),通过剪枝优化搜索效率。
2025-10-31 14:19:09
327
原创 LeetCode LRU缓存
本文实现了一个LRU缓存的数据结构,使用哈希表+双向链表来保证O(1)时间复杂度的get和put操作。主要思路是:哈希表存储键值对,双向链表维护访问顺序。最近访问的节点放在链表头部,最久未访问的放在尾部。当缓存满时,从尾部删除节点。代码实现包括初始化缓存、获取值(get)、插入/更新值(put)等核心方法,以及操作双向链表的辅助函数(添加节点、移动节点、删除节点等)。通过这种设计,既保证了快速查找,又能高效维护访问顺序。
2025-10-30 16:43:51
279
原创 LeetCode 将数组和减半的最少操作次数
【摘要】 LeetCode题目《将数组和减半的最少操作次数》要求通过每次将数组中任意元素减半的操作,使数组和至少减少一半。解题思路采用大顶堆优先处理最大值:1) 计算初始和并构建大顶堆;2) 循环取出堆顶元素减半后调整堆,累计操作次数直至和达标。Go实现中,通过自定义heapify函数维护堆结构,时间复杂度为O(n log n)。典型贪心策略,每次处理当前最大值以最快逼近目标。
2025-10-15 22:12:33
166
原创 LeetCode 合并K个升序链表
该算法使用小顶堆合并K个有序链表。首先将所有链表的头节点加入堆并构建小顶堆,然后每次取出堆顶元素(最小值)加入结果链表。若该节点有后继节点,则将其加入堆并调整堆结构,直到堆为空。通过堆排序保证每次取出的都是当前最小值,时间复杂度为O(NlogK),其中N是总节点数,K是链表数。关键步骤包括堆的初始化、调整和元素交换操作。
2025-10-15 15:58:44
362
原创 Go语言实现堆排序
这篇文章展示了用Go语言实现堆排序的代码。算法首先构建大顶堆,然后通过循环交换堆顶元素(最大值)与末尾元素,并重新调整堆结构,最终完成排序。核心函数heapify负责维护堆的性质,通过比较父节点与子节点的大小关系,确保始终保持大顶堆结构。该实现具有O(nlogn)的时间复杂度和O(1)的空间复杂度,是一种高效的原地排序算法。代码简洁明了,完整展示了堆排序的关键步骤。
2025-10-14 10:49:21
438
原创 LeetCode 数组最第k大的元素
该算法使用快速选择思想在O(n)时间复杂度内找到数组中第k大的元素。通过随机选取基准值x进行分区,将数组分为小于x、等于x和大于x三部分,并根据目标索引与分区边界的关系递归处理对应区间。关键点在于随机化基准选择保证期望时间复杂度,以及分区函数将数组划分为三个区域(<x, =x, >x)。当目标索引落入等于x的区间时直接返回结果,否则在相应子区间继续查找。这种方法避免了完整排序,实现了高效查找。
2025-10-13 09:32:17
142
原创 LeetCode 翻转对
该题目要求统计数组中满足i<j且nums[i]>2*nums[j]的逆序对数量。摘要:通过改进的归并排序算法,在合并左右子数组时统计跨子数组的逆序对。具体实现中,divide函数递归分割数组,merge函数在归并排序过程中,利用双指针遍历左右子数组满足条件的逆序对,时间复杂度为O(n log n)。示例输入[1,3,2,3,1]输出2,[2,4,3,5,1]输出3。
2025-10-12 09:51:56
144
原创 LeetCode-Hot100 最小栈实现
本文实现了一个支持常数时间获取最小值的栈结构MinStack。该结构使用两个切片:stack存储所有元素,minVal记录每个栈状态下的最小值。主要方法包括:构造函数初始化栈;Push方法在入栈时同时更新最小值;Pop方法同步删除两个切片的顶部元素;Top和GetMin方法分别返回栈顶元素和当前最小值,均能在O(1)时间内完成。该实现通过维护最小值副本来保证快速查询,同时保持栈的基本操作效率。
2025-09-28 23:10:10
267
原创 docker 启用容器端口被占用报错500
服务器端口冲突导致500错误,提示13306端口无权限访问。解决方案:以管理员身份运行命令重启WinNAT网络地址转换服务:先执行"net stop winnat"停止服务,再执行"net start winnat"重启服务。该操作可释放被占用的端口,解决socket访问权限问题。
2025-09-23 22:50:11
320
原创 LeetCode-2390. 从字符串中移除星号
题目要求从字符串中移除所有星号及其左侧最近的字符,保证操作可行且结果唯一。使用栈结构实现:遍历字符串,非星号字符入栈,遇到星号时统计连续星号数量,并弹出栈顶相应数量的字符。最终栈中剩余字符即为结果。该解法时间复杂度O(n),空间复杂度O(n),确保高效可靠。
2025-06-21 08:56:56
295
原创 LeetCode-1679. K 和数对的最大数目
摘要:题目要求从数组中移除和为k的整数对,计算最大操作次数。通过哈希表统计元素频次,对每个元素查找补数(k-key),若存在则取两者频次的较小值作为操作次数。处理时需跳过大于k的元素,并特殊处理key为k/2的情况。时间复杂度O(n),空间复杂度O(n)。(96字)
2025-06-19 09:18:04
205
原创 LeetCode-283. 移动零
本文介绍了将数组中所有零移动到末尾的原地算法。使用双指针法:左指针(l)标记待处理位置,右指针(r)寻找非零元素。当l指向0时,r找到非零元素即交换;若r指向0则继续右移。确保非零元素顺序不变,时间复杂度O(n)。示例代码展示了该思路的Go语言实现,通过指针移动和元素交换完成操作,无需额外空间。
2025-06-18 17:04:21
230
原创 LeetCode-374. 猜数字大小
摘要: 这是一个经典猜数字游戏的二分查找实现。题目要求在1到n范围内通过调用guess()接口来查找目标数字。实现采用二分查找算法,通过比较中间值与目标值的关系来不断缩小搜索范围。当guess返回-1时表示猜测值过大,调整右边界;返回1时表示猜测值过小,调整左边界;返回0时找到目标。注意在更新左边界时需要设为mid+1以避免死循环。该方法时间复杂度为O(log n),空间复杂度O(1)。
2025-06-17 16:41:48
213
原创 LeetCode-151. 反转字符串中的单词
该题目要求反转字符串中的单词顺序并处理多余空格。实现思路是:先用空格分割字符串得到单词数组,然后逆序遍历数组,跳过空串,重组单词并用单个空格连接。最后用TrimSpace去除首尾空格。Go语言实现通过strings.Split分割字符串,逆序拼接非空单词,确保结果中单词间仅有一个空格且无多余空格。时间复杂度O(n),空间复杂度O(n)。
2025-06-16 18:06:24
222
原创 LeetCode-345. 反转字符串中的元音字母
摘要:题目要求反转字符串中的所有元音字母。实现思路是先使用栈存储所有元音字母,再遍历原字符串,遇到元音字母时从栈顶取出反转后的字母。代码中定义isVowel函数判断字符是否为元音(包括大小写),reverseVowels函数使用栈结构实现反转。时间复杂度O(n),空间复杂度O(n)。该方法简洁高效地实现了元音字母的反转。
2025-06-16 17:21:41
211
原创 LeetCode-392 判断子序列
因为判断s是否是t的子序列,所以只需要遍历一遍字符串t即可,如果发现t[i] == s[k]则k++;程序运行结束如果s是t的子序列,那么t一定等于s的长度。(k 为当前s中有几位是t的子序列)字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。给定字符串 s 和 t ,判断 s 是否为 t 的子序列。
2025-04-24 12:21:15
226
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1