未名编程
编程爱好者,诗词达人
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【LeetCode 热题 100】1. 两数之和 | 为什么用哈希表?Python实现+底层原理全懂了!
LeetCode题解:两数之和问题,要求找出数组中相加等于目标值的两个数。暴力解法时间复杂度O(n²),推荐使用哈希表优化至O(n)。核心思路:遍历数组时,用字典记录已访问数字及其索引,实时检查target - num是否存在于字典中。Python实现简洁,利用字典的O(1)查询特性。示例详述执行过程,分析时空复杂度,强调避免重复元素使用。延伸建议学习哈希表原理及相关题目合集。该解法是面试常见最优解,适合算法入门学习。原创 2025-05-26 09:50:50 · 151 阅读 · 0 评论 -
【LeetCode 热题 100】32.最长有效括号 一题吃透栈结构核心思维!栈 + 下标 + 重置逻辑全解析
本文介绍了如何解决LeetCode中的“最长有效括号”问题,主要推荐使用栈结合下标索引的方法。通过栈保存未匹配的括号下标,利用当前索引与栈顶索引的差值计算合法子串长度,并初始化栈为-1作为基准参考点。文章详细解释了栈的处理机制,并通过示例图解展示了核心逻辑。此外,还简要介绍了动态规划的解法作为补充。最后,文章总结了技术点,并推荐了相关练习题目,帮助读者深入理解栈结构和括号配对问题。原创 2025-05-20 09:56:25 · 64 阅读 · 0 评论 -
【LeetCode 热题 100】5. 最长回文子串(Python中心扩展法详解)
LeetCode 5题要求找出字符串中最长的回文子串。回文串是指正读反读都相同的字符串。解题思路推荐使用中心扩展法,该方法通过将每个字符作为回文中心,向两边扩展,直到字符不匹配为止。回文串可能为奇数长度或偶数长度,因此需要分别处理。Python实现中,通过辅助函数expand进行扩展,并记录最长回文子串的起点和长度。核心细节包括扩展失败后返回有效匹配的边界。时间复杂度为O(n²),空间复杂度为O(1)。相比动态规划和Manacher’s Algorithm,中心扩展法更简单且节省空间。总结来说,中心扩展法逻原创 2025-05-16 09:46:43 · 136 阅读 · 0 评论 -
【LeetCode 热题 100】121.买卖股票的最佳时机(一次遍历 + 贪心策略,附图解 + Python 实现)
本文详细解析了 LeetCode 热门面试题「121. 买卖股票的最佳时机」,通过贪心算法实现一次遍历即可求解。文章介绍了如何维护最低买入价和最大利润,并提供了 Python 代码实现。关键细节包括使用 float('inf') 初始化最小价格和贪心算法的局部最优策略。图解过程帮助理解算法执行步骤,测试用例验证了代码的正确性。复杂度分析表明该算法时间复杂度为 O(n),空间复杂度为 O(1),适合大规模输入。文章还推荐了相关扩展题目,帮助读者进一步掌握股票交易类问题的解法。总结指出,本题是贪心策略的经典案例原创 2025-05-16 09:19:21 · 93 阅读 · 0 评论 -
【LeetCode 热题 100】54. 螺旋矩阵题解:一文彻底搞懂边界控制与顺时针遍历
本文介绍了如何按顺时针螺旋顺序遍历二维矩阵并返回所有元素。通过定义四个边界变量(top、bottom、left、right),逐层缩小矩阵边界,依次从左到右、从上到下、从右到左、从下到上遍历矩阵。代码实现中需要注意 range 的左闭右开特性,并在逆向遍历前添加边界判断,防止重复访问。文章还提供了记忆口诀和拓展练习,帮助读者更好地掌握这一技巧。原创 2025-05-16 08:44:11 · 75 阅读 · 0 评论 -
【LeetCode 热题 100】53.最大子数组和详解(Kadane算法)图解 + 动态规划思路解析
Kadane 算法是一种用于解决最大子数组和问题的高效动态规划方法。其核心思想是通过遍历数组,记录以当前元素结尾的最大子数组和,并不断更新全局最大值。算法的时间复杂度为 O(n),空间复杂度为 O(1),适用于包含负数的数组。Kadane 算法通过状态转移方程 current_sum = max(num, current_sum + num) 和全局更新 max_sum = max(max_sum, current_sum) 来实现,体现了动态规划的最优子结构和状态转移特性。该算法不仅简洁高效,还能通过记录原创 2025-05-16 00:26:20 · 103 阅读 · 0 评论 -
【LeetCode 热题 100】56. 合并区间 —— 一文弄懂排序+遍历经典解法(附Python代码)
本文介绍了LeetCode上的合并区间问题,要求将给定区间数组中所有重叠的区间合并,并返回不重叠的区间集合。解题核心思想是通过排序和逐个合并的方式处理区间重叠问题。首先,对区间按起始位置进行升序排序,然后遍历区间列表,逐个判断当前区间与已合并的最后一个区间是否重叠,若无重叠则直接加入结果,否则合并两区间。文章还提供了Python代码实现,并对算法的时间复杂度进行了分析,指出其时间复杂度为O(n log n)。最后,文章总结了该问题的关键点,并推荐了相关拓展题目。原创 2025-05-15 23:35:19 · 240 阅读 · 0 评论 -
LeetCode 88. 合并两个有序数组 | Python 最简写法 + 实战注释
「合并两个有序数组」是LeetCode上的经典题目,考察数组操作和代码优化能力。题目要求将两个非递减顺序排列的数组 nums1 和 nums2 合并,并保持非递减顺序。解题思路采用倒序三指针法,通过从后往前比较并填充 nums1,避免移动已有元素,提升效率。Python解法使用三元表达式简洁实现,时间复杂度为 O(m + n),空间复杂度为 O(1)。该题是面试高频题,推荐掌握从后往前合并的技巧,并理解切片语法 [:j+1] 的细节。原创 2025-05-10 10:32:57 · 156 阅读 · 0 评论 -
【LeetCode 热题 100】215. 数组中的第K个最大元素(Python 快速选择详解)
本文介绍了如何在LeetCode中高效解决“第K大”问题,特别是题目215. 数组中的第K个最大元素。文章首先指出了暴力解法(排序后取第k个元素)的时间复杂度为O(n log n),不符合题目要求的O(n)。接着,详细介绍了快速选择算法(Quickselect),这是一种基于快速排序的变种,通过分治策略将平均时间复杂度降低到O(n)。文章还提供了Python实现代码,并通过示例解释了算法的执行过程。最后,分析了算法的时间与空间复杂度,并给出了优化建议。总结指出,快速选择是解决“第K大”问题的有效工具,随机选原创 2025-05-10 09:59:42 · 180 阅读 · 0 评论 -
【LeetCode 热题 100】206. 反转链表
文章介绍了如何反转单链表,重点讲解了迭代法和递归法两种实现方式。首先,文章澄清了链表与Python列表的区别,强调链表是通过节点和指针连接的数据结构。接着,详细解释了迭代法的核心思路,即通过三个指针(cur、pre、tmp)逐步改变节点的next指针方向,并提供了图解和Python代码实现。此外,文章还总结了常见错误,如指针指向自身或忘记保存cur.next等。对于递归法,文章也提供了代码示例,并建议在面试中优先使用迭代法。最后,文章推荐了相关的练习题,帮助读者进一步巩固链表操作技能。原创 2025-05-10 09:00:03 · 138 阅读 · 0 评论 -
【LeetCode 热题 100】3.无重复字符的最长子串:详解滑动窗口解法
技术点说明滑动窗口用两个指针控制当前区间集合set()用于存储并快速查找重复字符双指针控制窗口动态扩展与收缩类型注解增强代码可读性,利于调试。原创 2025-05-01 10:57:15 · 231 阅读 · 0 评论