优选算法精品
文章平均质量分 95
以实战为线索,深度刨析每道算法题解
Fcw0551
难走的路从来都不拥挤
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
分治-归并:高效解决逆序对问题
本文探讨了分治算法在排序和统计问题中的应用。通过归并排序和快速排序的对比,阐述了两种分治策略的区别:快速排序在分治过程中边分边解决问题,而归并排序则是先分治后合并解决。文章详细讲解了四道LeetCode题目的分治解法:912题复习归并排序,170题统计逆序对,315题计算右侧较小元素,493题处理翻转对。特别强调了493题中比较条件变化带来的处理差异,需要先统计再排序。最后总结指出,当问题可拆分为独立解决的子问题或可通过分区缩小规模时,分治算法是优先考虑方案。原创 2025-11-02 20:07:43 · 941 阅读 · 0 评论 -
分治思想之快排优化:三分区防退化与剪枝降复杂度
本文摘要:文章系统讲解分治算法在排序问题中的应用,重点分析快速排序的优化策略。通过LeetCode例题(75、912、215、面试题17.14)演示:1)传统快排通过三分区(<key/=key/>key)避免重复元素导致的时间复杂度退化;2)TopK问题采用剪枝策略,仅递归目标区间实现O(n)时间复杂度;3)关键实现包括随机基准选择(rand()%(r-l+1)+l)和三指针分区逻辑。相比简单二分区,三分区能高效处理重复元素,是解决LeetCode超时问题的核心技巧。原创 2025-11-02 19:00:00 · 591 阅读 · 0 评论 -
轻松掌握模拟算法:从题目到代码
本文总结了模拟算法的解题思路和典型例题。模拟算法的核心是严格遵循题目要求,将描述过程直接转换为代码实现。文章通过LeetCode 1576、495、6、38、1419等例题,展示了不同场景下的模拟方法:包括字符替换、时间计算、Z字排列、字符串生成和状态跟踪等。对于复杂度较高的问题(如Z字变换),可以通过寻找数学规律来优化实现。模拟算法的关键在于仔细处理边界条件,确保代码正确还原题目描述的逻辑流程。解题时应先在纸上梳理清楚算法步骤,再转化为代码。原创 2025-10-31 18:00:00 · 1567 阅读 · 0 评论 -
位运算全解析:从入门到精通
本文系统介绍了位运算的基础知识、常见题型及其应用场景。主要内容包括:1)基本位运算操作(与、或、异或、位移、取反)的定义和记忆方法;2)六类典型位运算问题(位图操作、lowbit提取等)及其解题思路;3)LeetCode经典例题解析(如136、137、268等题),展示如何利用异或特性解决唯一出现/次数统计问题;4)位运算在算法优化中的优势,特别适合处理需要高效空间/时间复杂度的场景。文章强调位运算在状态表示、特征判断等方面的底层优势,是处理大规模数据的重要工具。原创 2025-10-28 18:00:00 · 1086 阅读 · 0 评论 -
前缀和算法:高效解决区间和问题
文章摘要: 前缀和是一种高效的数组预处理算法,通过预先计算累加和将区间查询优化至O(1)时间。核心思想是"空间换时间",适用于一维/二维数组的区间和、子数组等问题。文章详解了前缀和的实现原理、边界处理技巧(如辅助空间和下标映射),并通过LeetCode 724(中心下标)、238(除自身乘积)、560(和为K子数组)、974(可被子数组)、525(01等长子数组)、1314(矩阵区域和)等例题,对比了暴力解与前缀和解法的效率差异,强调哈希表优化和动态滚动数组的应用。特别指出负数取模修正和原创 2025-10-25 17:41:28 · 1149 阅读 · 0 评论 -
二分查找:二段性的秘密与实战技巧
本文系统讲解了二分查找算法的原理与应用,重点强调了二分查找的核心在于利用数组的"二段性"而非单纯的有序性。文章通过LeetCode 704、34、69、35、852、162、153等经典例题,详细分析了三种二分模板的实现细节:1)朴素二分查找;2)寻找区间左端点;3)寻找区间右端点。特别指出算法实现中的关键细节:循环条件的选择(left<=right或left<right)、中点计算的防溢出处理(left+(right-left)/2)、边界条件的特殊处理等。通过山峰数组、旋原创 2025-10-25 17:42:15 · 1095 阅读 · 0 评论 -
滑动窗口:双指针的高效应用
滑动窗口算法是双指针的一种具体应用,主要用于解决数组/字符串子区间问题。其核心思想是通过维护一个动态变化的窗口(由左右指针界定),将暴力解法的O(n²)时间复杂度优化到O(n)。窗口通过右指针扩大、左指针缩小来动态调整,满足特定条件(如和、计数、匹配等)。典型应用包括求最短子数组(LeetCode 209)、最长无重复子串(LeetCode 3)、最多翻转k个0(LeetCode 1004)等问题。该算法的关键在于利用单调性或特定条件(如正数数组的和递增)避免无效枚举,通过同向移动指针实现高效求解。原创 2025-10-19 14:49:51 · 815 阅读 · 0 评论 -
双指针算法:高效解决问题的利器
双指针算法是一种高效的编程技巧,通过在数组或链表中使用两个指针协同工作来优化时间复杂度。主要分为三种应用模式:相向指针(如两数之和)、同向指针(如滑动窗口)和分离指针(如合并有序数组)。该算法能将O(n²)暴力解法优化为O(n),尤其适合处理有序数据。典型应用包括283题移动零、15题三数之和、11题盛水容器等。关键是根据题目特性选择指针移动规则,确保每个元素只被访问一次,同时兼顾空间效率。判断是否使用双指针的步骤为:分析暴力解法复杂度、检查数据单调性、排除更优解法。原创 2025-10-15 16:10:39 · 734 阅读 · 0 评论
分享