- 博客(23)
- 收藏
- 关注
原创 【leetcode复健-16】73. 矩阵置零
摘要: 题目要求将矩阵中0元素所在的行和列全部置零,要求使用原地算法。常见解法包括O(mn)和O(m+n)空间复杂度的方法,但最优解应使用O(1)空间。通过复用矩阵的首行和首列作为标记位,并额外用两个变量标记首行/列自身是否需置零,可实现常量空间操作。具体步骤为:1) 标记首行/列是否含0;2) 遍历内部区域,用首行/列记录需置零的行/列;3) 根据标记清零内部区域;4) 最后处理首行/列。代码展示了O(m+n)和O(1)两种实现。
2026-08-18 19:03:22
230
原创 【leetcode复健-15】41. 缺失的第一个正数
题目要求在未排序的整数数组中找到缺失的最小正整数,要求时间复杂度O(n)且只使用常数空间。关键思路是利用数组本身作为哈希表,通过原地交换将数值1到n放到对应索引位置(即nums[i]=i+1)。最终遍历数组,第一个不满足该条件的索引即为答案,若全部满足则返回n+1。该方法避免了额外空间的使用,通过两次遍历(交换+检查)实现了高效求解。
2026-08-17 19:10:00
208
原创 【leetcode复健-14】238. 除了自身以外数组的乘积 -
摘要:题目要求在O(n)时间内计算数组每个元素除自身外的乘积,且不使用除法。核心思路是将乘积拆分为左累积和右累积的乘积。例如,对于nums=[1,2,3,4],答案[24,12,8,6]分别对应右侧、左右结合、左侧的累积乘积。解法通过两次遍历(正向累乘左积存到结果数组,反向累乘右积并同步相乘)实现,空间优化至O(1)(输出数组不计)。代码示例使用双指针动态计算左右累积,最终合并结果。进阶要求通过复用输出数组进一步降低空间占用。
2026-08-15 18:23:40
200
原创 【leetcode复健-13】189. 轮转数组-排序
本文介绍了LeetCode第189题"轮转数组"的解题思路。题目要求将数组元素向右循环移动k个位置,末尾元素移到开头。解题采用循环队列思想,通过取模运算实现索引循环。关键点在于处理元素长度与k值的最大公约数关系,当存在公约数时需分轮处理,否则直接完成全部轮转。代码实现使用双指针和临时变量进行元素交换,通过计算最大公约数确定循环轮数,确保在O(n)时间复杂度和O(1)空间复杂度内完成操作。最终方案避免了数据丢失问题,并优化了处理效率。
2026-08-14 19:33:52
176
原创 【leetcode复健-12】56. 合并区间-排序
摘要: LeetCode 56题要求合并给定区间集合中的所有重叠区间。解决思路是先将区间按左端点排序,然后遍历相邻区间:若当前区间左端点小于等于已合并区间的右端点,则合并(取最大右端点);否则直接加入结果。例如,输入[[1,3],[2,6]]输出[[1,6]]。代码通过排序和一次遍历实现,时间复杂度主要为排序的O(n log n)。关键步骤包括排序和动态更新合并区间的右边界。
2026-08-13 18:26:25
195
原创 【leetcode复健-11】53. 最大子数组和-滑动窗口
该题目要求在整数数组中找到具有最大和的连续子数组。关键思路是遍历数组时维护当前子数组和,若当前和为负则舍弃(因其对后续无贡献),否则继续累加。使用两个变量分别记录当前和与最大和,每次迭代更新这两个值。最终返回最大和即可。时间复杂度O(n),空间复杂度O(1)。示例解法中,数组[-2,1,-3,4,-1,2,1,-5,4]的最大子数组和为6(来自子数组[4,-1,2,1])。
2026-08-09 18:06:31
218
原创 【leetcode复健-10】76. 最小覆盖子串-滑动窗口-哈希表
摘要: 题目要求在字符串s中找出包含字符串t所有字符(含重复)的最短子串。采用滑动窗口算法,维护两个哈希表分别记录t的字符需求(need)和当前窗口的字符统计(have),通过变量valid跟踪满足条件的字符种类数。窗口右扩时更新have和valid,当valid达标时收缩左边界以最小化窗口,记录最优解。时间复杂度为O(m),空间复杂度O(n),适用于大规模输入。示例代码使用Python的Counter简化字典操作,最终返回最小子串或空字符串。 关键词:滑动窗口、哈希表、最小覆盖子串、双指针、字符串匹配
2026-08-08 18:03:24
172
原创 【leetcode复健-9】239. 滑动窗口最大值-滑动窗口-队列
摘要:LeetCode 239题要求实现滑动窗口最大值算法。给定数组和窗口大小k,窗口从左滑到右,每次返回窗口内最大值。优化关键在于减少比较次数,通过双端队列维护可能的最大值候选(存下标)。遍历时,移除队列中比当前值小的元素,确保队首是当前窗口最大值。若队首超出窗口范围则移除。时间复杂度O(n)。示例代码使用Python的deque实现该逻辑。
2026-08-07 18:03:05
237
原创 【leetcode复健-8】560. 和为 K 的子数组-前缀和思想+哈希表
给你一个整数数组nums和一个整数k,请你统计并返回该数组中和为k的子数组的个数。子数组是数组中元素的连续非空序列。22。
2026-08-06 17:21:03
223
原创 【leetcode复健-7】找到字符串中所有字母异位词-滑动窗口+哈希表
摘要: 题目要求在字符串s中查找所有与字符串p为字母异位词的子串,返回起始索引。字母异位词指字母相同但顺序不同。通过滑动窗口和哈希表优化,避免排序的高复杂度。初始化两个哈希表分别记录p的字母频次和s当前窗口的字母频次,窗口滑动时动态更新哈希表并比较。时间复杂度为O(n),空间复杂度O(1)(固定26字母)。示例:s="cbaebabacd",p="abc"时,输出[0,6],对应子串"cba"和"bac"。关键点在于高效比较字母
2026-08-02 18:46:10
216
原创 【leetcode复健-6】无重复字符的最长字串-滑动窗口的运用
本文介绍了力扣题目「无重复字符的最长子串」的解法。核心思路是使用滑动窗口配合哈希字典,通过变量x记录无效边界来高效处理重复字符。关键点在于遇到重复时不丢弃整个子串,而是调整窗口左边界。最终给出Python实现代码,在一次遍历中即可求解,时间复杂度为O(n)。该方法避免了暴力解法的低效,巧妙利用哈希表存储字符位置,通过维护当前窗口长度和最大长度变量来获得最优解。
2026-08-01 19:25:30
238
原创 写这道题的我就这样!
本文讨论了LeetCode接雨水问题的两种解法。初代解法采用双指针+剪枝思想,通过寻找最大柱子位置后分别左右遍历计算水量,但存在切片操作耗时问题。优化解法改为从单柱角度出发,记录左右最高柱子,计算每个柱子上方能接的水量,避免了切片操作,效率更高。两种方法都利用了短板效应原理,通过预处理最大柱子位置简化计算。优化后的解法时间复杂度为O(n),空间复杂度为O(1),是更优的实现方案。
2026-07-31 18:41:23
160
原创 “这个(哈希),不需要了”-- 三数之和~ 我那无敌的哈希表败给了可爱的剪枝
该文章讨论了LeetCode上的“三数之和”问题(15题),提出了从暴力解法到优化解法的思路演进。最初采用三重循环(O(n³))的暴力解法,后优化为排序+双指针法(O(n²)),通过固定一个数后转化为两数之和问题。初始方案使用哈希表去重,但存在性能问题;优化后引入剪枝策略:1)当首元素大于0时提前终止;2)跳过重复元素避免重复计算。最终代码通过排序和双指针高效找到所有不重复的三元组,解决了性能瓶颈并正确实现题目要求。
2026-07-28 19:42:26
193
原创 装最多的水,养最大的鱼~ 剪枝思想+双指针
由于面积取决于最矮的柱子,在当前宽最大的情况下,显然较矮的柱子不具有最大面积的可能性,因此我们需要移动最矮柱子的指针向中心靠拢,重复这一过程,就能够找到包含最大值的组合。# 核心思想:同时放两个指针,lf,rf,指向最左,最右端,维护一个最大体积变量max_v。最初的情况宽是最大的,因此为了找到可能大于当前面积的最大面积,我们必须移动双指针。# 若保留最矮的柱子那么后续的体积一定小于当前体积,因此我们需要移动最矮的柱子。# 比较左右柱子的大小,移动最小的,lf右移,rf左移。# 循环至两个指针相撞。
2026-07-27 20:11:45
139
原创 算法-移动零-冒泡排序的升级应用(欸?为什么要移动零?谁是零?)
摘要:本文讨论了LeetCode 283题"移动零"的两种解法。作者最初尝试使用队列结构,将非零元素重新加入队尾、零元素最后统一处理,但因改变数据结构地址而无效。正确解法采用双指针技术:左指针标记零元素位置,右指针寻找非零元素进行交换。这种方法通过一次遍历即可实现所有零元素右移,同时保持非零元素原始顺序,满足题目要求的原地修改条件。双指针法类似冒泡排序思想但更高效,时间复杂度为O(n)。
2026-07-25 18:26:42
223
原创 标签‘简单’的算法难道真的简单?理论对实战主义的啪啪打脸-python
本文作者分享了在刷LeetCode算法题时的两次挫败经历。第一题"两数之和"本想暴力解法却被9.27%的通过率打脸,后改用哈希表优化至O(n)复杂度;第二题"字母异位词分组"则通过字符串排序和哈希表成功解决。作者反思认为,虽然AI时代算法看似不再重要,但算法对编程思维和底层逻辑的提升至关重要,优秀的开发者必然具备扎实的算法基础,因此决定重新开始系统性学习算法。文章展现了从失败中学习、重视基础能力的成长心态。
2026-07-24 19:37:42
209
原创 【学习手札】如何使用 ChatOpenai 接口显示输出第三方模型思考过程?reasoning_content不管用了?跳脱于第三方兼容包的解决思路“response-api“ 探索向
本文分享了使用LangChain接入通义千问模型时遇到的思考过程流式输出问题及解决方案。作者尝试了三种方法:1)使用官方ChatTongyi接口,但存在模型限制;2)使用第三方langchain-qwq包,但学习成本高;3)使用OpenAI兼容接口,但官方移除了reasoning_content字段。最终解决方案是通过设置output_version="responses/v1"参数,从content字段解析思考链和文本输出。文章提供了完整代码示例,展示了如何正确获取模型的思考过程和输出
2026-04-26 16:44:37
1239
原创 【学习手札】 chroma向量库使用时,HNSW索引导致的错误
本文记录了作者在使用Chroma向量库时遇到的问题及排查过程。在优化RAG系统的去重功能时,作者将文件读写方式改为Redis实现,测试时出现"Error creating hnsw segment reader"错误。通过对比测试发现,问题可能源于Chroma数据库内部文件操作异常。最终解决方案是删除出错的数据库文件,并总结了应备份数据的经验教训。虽然问题未能完全复现和定位,但提供了排查思路和临时解决方法。
2026-04-06 21:26:12
627
原创 【我是蠢猪-合集】 branch 分支导致的文件丢失?/ status 中查找不到文件? 其实只是个误解... / git使用
首次使用Git时因不熟悉工作流程而产生困惑。作者详细介绍了从初始化到推送的完整Git操作步骤,重点解释了在commit后使用git status查看不到文件的原因:已提交的文件若无修改不会显示在status中。文章澄清了文件状态变化的逻辑(未跟踪-红色,暂存区-绿色,修改后-红色),并解答了如何更新文件的疑问。通过分享这个新手常见误区,作者帮助读者正确理解Git的工作机制。
2026-04-04 20:44:25
494
原创 【从零开始学习Agent开发】02 | 8G显卡也能跑!Ollama本地部署DeepSeek/Qwen避坑指南
本文详细介绍了如何在Windows 11系统上使用Ollama框架本地部署运行大语言模型。内容包括:Ollama简介及安装注意事项(避免C盘占用)、模型选择指南(根据GPU显存计算适配模型)、两种下载方式(可视化界面和命令行操作)、常用命令行指令详解(run/pull/list等)、以及如何通过Python接入本地模型进行开发。教程特别针对零基础用户,提供了从安装配置到实际使用的完整指引,帮助读者实现从云端API调用到本地模型部署的进阶,同时分享了避免C盘爆满等实用技巧。
2026-03-16 19:46:37
1204
原创 【从零开始学习Agent开发】 | openai的基本使用(通过pycharm使用大模型)
本文介绍了如何快速上手使用OpenAI库,主要内容包括:1) 准备工作:安装openai库、注册阿里云百炼平台获取API密钥;2) 基本使用:初始化客户端对象、调用模型进行对话、处理返回结果;3) 进阶功能:实现流式输出文本和查看模型思考过程。文章提供了详细的代码示例,帮助读者在短时间内掌握OpenAI的基本操作,适合具备Python基础的开发者快速入门。
2026-03-10 20:00:49
1166
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅