精选文章 - 算法学习第05天|Algorithm Picks
📚 今日算法学习精选
1. 递归与分治(Recursion & Divide and Conquer)
第五天我们来聊算法思想中最重要的递归。几乎所有高级算法都建立在递归之上,不会递归等于不会写算法。
递归(Recursion) 的三要素:
终止条件(Base Case):什么时候停止,不再调用自己
递归调用(Recursive Call):把大问题拆成小问题
状态传递(State Passing):参数如何变化,最终逼近终止条件
分治(Divide and Conquer) 是递归的高级用法:分(拆解)→治(解决子问题)→合(合并结果)。归并排序(Merge Sort)和快速排序(Quick Sort)就是分治的典型代表。
常见错误: 没有终止条件(...
精选文章 - 算法学习第04天|Algorithm Picks
📚 今日算法学习精选
1. 哈希表(Hash Table)
第四天我们学习”查找之王”——哈希表。它是面试中高频考察的数据结构,也是工程中被使用最多的数据结构之一。
哈希表的核心思想是用哈希函数(Hash Function) 将键(Key)映射到数组下标,实现 $O(1)$ 平均查找/插入/删除。说起来简单,但三个问题必须掌握:
哈希碰撞(Hash Collision):两个不同的键算出了相同的下标。解决方案:链地址法(Chaining,用链表存冲突元素)和开放地址法(Open Addressing,探测下一个空位)
扩容(Resizing):负载因子(Load Factor)过大时触发扩容,通常翻倍重建
哈希攻击(Hash Flooding):恶意构造大量碰撞拖...
精选文章 - 算法学习第03天|Algorithm Picks
📚 今日算法学习精选
1. 栈与队列(Stack & Queue)
第三天我们认识两位”限定访问”的数据结构大师:栈和队列。它们不追求最快,只追求最守规矩。
栈(Stack) 是后进先出(LIFO, Last In First Out)的数据结构。想象一叠盘子,最后放的盘子最先被拿走。核心操作:push(压入)、pop(弹出)、peek(查看栈顶)。应用场景:函数调用栈(Function Call Stack)、括号匹配(Bracket Matching)、单调栈(Monotonic Stack)。
队列(Queue) 是先进先出(FIFO, First In First Out)的数据结构。想象排队,最早来的最先服务。核心操作:enqueue(入队)、dequeue(...
精选文章 - 算法学习第02天|Algorithm Picks
📚 今日算法学习精选
1. 数组与链表(Array vs Linked List)
第二天我们聊数据结构的两大基石:数组和链表。这两兄弟是几乎所有高级数据结构的”底层零件”,必须烂熟于心。
数组(Array) 连续内存存储,支持 $O(1)$ 随机访问(Random Access),但插入/删除操作是 $O(n)$,因为要搬移元素。
链表(Linked List) 节点散落各处,通过指针相连。插入/删除是 $O(1)$,但查找是 $O(n)$,只能从头扫到尾。
核心区别: 数组查快改慢,链表改快查慢。记住这个口诀,很多题目就知道该用谁了。
2. 推荐资源
CS61B(UC Berkeley) — 数据结构与算法经典课程,YouTube免费,B站也有搬运
《算法(...
精选文章 - 算法学习第01天|Algorithm Picks
📚 今日算法学习精选
1. 算法复杂度分析(Time & Space Complexity)
算法学习的第一天,我们从最基础却最关键的复杂度分析开始。很多初学者跳过这一章直接刷题,结果做十道错八道——因为他们根本不知道自己写的算法是快是慢。
复杂度就是算法的”性能说明书”。时间复杂度(Time Complexity)告诉你程序跑多快,空间复杂度(Space Complexity)告诉你程序吃多少内存。大O表示法(Big O Notation)是行业标准——$O(1)$、$O(\log n)$、$O(n)$、$O(n \log n)$、$O(n^2)$、$O(2^n)$,从快到慢背下来,这是基本功。
学习建议: 不要死记公式,拿实际代码跑。写一个简单的冒泡排序,用不同的 ...
精选文章 - 算法学习第30天|Algorithm Picks
今日精选|Today’s Picks
📌 文章推荐|Recommended Reading
Trie(字典树/前缀树):高效字符串处理利器
Trie(发音同”try”)是一种专用于处理字符串搜索的树形数据结构,核心应用场景包括:前缀搜索、自动补全、IP 路由表、拼写检查等。相比哈希表,Trie 在前缀匹配上有天然优势,空间利用率也更高。
Trie (pronounced “try”) is a tree data structure purpose-built for string operations — especially prefix-based search. Unlike hash tables, Trie excels at prefix matching and...
精选文章 - 算法学习第29天|Algorithm Picks
今日精选|Today’s Picks
📌 文章推荐|Recommended Reading
动态规划(Dynamic Programming)入门:拆分问题的艺术
动态规划是算法中最核心的思想之一,也是面试中最让考生头疼的题型。其核心在于将复杂问题拆解为相互重叠的子问题(Overlapping Subproblems),通过存储子问题的解来避免重复计算(Memoization)。
Dynamic Programming is one of the most important algorithmic paradigms and frequently the most feared in interviews. The key idea: break complex proble...
精选文章 - 算法学习第28天|Algorithm Picks
今日精选|Today’s Picks
📌 文章推荐|Recommended Reading
并查集(Union-Find)完全指南
并查集是一种处理不相交集合(Disjoint Sets)合并与查询的数据结构,核心操作只有两个:Find(查集)和 Union(合并)。在解决连通性问题(Connected Components)时表现出色,典型应用包括 Kruskal 最小生成树算法、网络连接判断、朋友圈问题等。
Union-Find is a data structure designed for managing disjoint sets with just two core operations: Find (path compression) and Union (by...
布隆过滤器 - 高效的概率型数据结构和搜索利器|Bloom Filter
什么是布隆过滤器?|What is a Bloom Filter?
布隆过滤器(Bloom Filter)由 Burton Howard Bloom 于 1970 年提出,是一种空间效率极高的概率型数据结构(Probabilistic Data Structure)。它专门用来回答”某个元素是否一定不存在于集合中”这个问题——注意,这里说的是”一定不存在”,而不是”一定存在”。
A Bloom Filter, invented by Burton Howard Bloom in 1970, is a space-efficient probabilistic data structure designed to answer one key question: “Is this e...
精选文章 - 算法学习第27天|Algorithm Picks
今日精选|Today’s Picks
📌 文章推荐|Recommended Reading
滑动窗口(Sliding Window)技巧详解
滑动窗口是处理数组/链表子结构问题的经典技巧,核心思想是维护一个可变大小的窗口,通过左右指针的移动来实现 O(n) 时间复杂度的遍历。相比暴力解法 O(n²) 或 O(n³) 的枚举,滑动窗口能将时间复杂度降至线性,是算法面试中的高频考点。
The Sliding Window technique is a classic approach for solving subarray or sublist problems. By maintaining a dynamic window with two pointers, you can...
📚 排序算法全面对比分析
📚 排序算法全面对比分析
英文标题 / English Title: Comprehensive Comparison of Sorting Algorithms
来源 / Source: Toptal
📌 文章简介 / Introduction
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点 / Key Points
深入理解核心概念
结合实例理解原理
多动手实践练习
*每日精选,持续更新
Curated daily*
快速排序 (Quick Sort)
🧮 快速排序 (Quick Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n log n)
空间复杂度 / Space Complexity: O(log n)
📖 算法简介 / Introduction
快速排序是一种高效的分治排序算法,采用递归和分区策略。
Quick sort is an efficient divide-and-conquer sorting algorithm using recursion and partitioning.
💡 算法原理 / Principle
选择一个基准元素,将数组分为两部分,...
📚 动态规划思维训练
📚 动态规划思维训练
英文标题 / English Title: Dynamic Programming Mindset Training
来源 / Source: Medium
📌 文章简介 / Introduction
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点 / Key Points
深入理解核心概念
结合实例理解原理
多动手实践练习
*每日精选,持续更新
Curated daily*
动态规划 (Dynamic Programming)
🧮 动态规划 (Dynamic Programming)
难度 / Difficulty: 困难 (Hard)
分类 / Category: 算法思想 (Algorithm Paradigm)
时间复杂度 / Time Complexity: O(n)
空间复杂度 / Space Complexity: O(n) 或 O(1)
📖 算法简介 / Introduction
动态规划是一种将复杂问题分解为更小子问题的算法思想,通过存储子问题避免重复计算。
DP is an algorithm paradigm that decomposes complex problems into subproblems, storing results to avoid redun...
动态规划 (Dynamic Programming)
🧮 动态规划 (Dynamic Programming)
难度: 困难 | 时间复杂度: O(n) | 空间复杂度: O(n)
算法原理
最优子结构 + 重叠子问题 = 动态规划。通过记忆化或自底向上避免重复计算。
本文由 AI 自动生成
Dijkstra算法 (Dijkstra Algorithm)
🧮 Dijkstra算法 (Dijkstra Algorithm)
难度: 困难 | 时间复杂度: O((V+E)logV) | 空间复杂度: O(V)
算法原理
从起点开始,每次选择未处理节点中距离最小的,加入已处理集合,更新邻居距离。
本文由 AI 自动生成
动态规划 (Dynamic Programming)
🧮 动态规划 (Dynamic Programming)
难度: 困难 | 时间复杂度: O(n) | 空间复杂度: O(n)
算法原理
将复杂问题分解为更小子问题,通过存储子问题避免重复计算。
代码实现
def fib_dp(n):
if n <= 1: return n
dp = [0] * (n + 1)
dp[1] = 1
for i in range(2, n + 1):
dp[i] = dp[i-1] + dp[i-2]
return dp[n]
本文由 AI 自动生成
树状数组(Fenwick Tree)
树状数组(Fenwick Tree),又称 Binary Indexed Tree(BIT),可以在 O(log n) 时间内完成前缀和查询和单点更新,是处理动态区间和的利器。
📚 并查集详解:从入门到 LeetCode 刷题实战
📚 并查集详解:从入门到 LeetCode 刷题实战
英文标题 / English Title: Union Find Explained: From Basics to LeetCode Problem Solving
来源 / Source: 程序员吴师兄 & Labuladong 的算法笔记
📌 文章简介 / Introduction
并查集(Disjoint Set Union, DSU)是一种看起来简单、真正理解却需要思考的数据结构。它在 LeetCode 中出现频率极高,尤其在连通性、集合合并类问题中几乎是标准解法。本文从基础讲起,深入讲解两个核心优化(路径压缩 + 按秩合并),并结合真题展示实战技巧。
Union Find (DSU) looks s...
并查集 (Union Find / Disjoint Set Union)
🧮 并查集 (Union Find / Disjoint Set Union)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 图论数据结构 (Graph Data Structure)
时间复杂度 / Time Complexity: O(α(n))(α为反阿克曼函数,近似常数)
空间复杂度 / Space Complexity: O(n)
📖 算法简介 / Introduction
并查集(Union Find / Disjoint Set Union)是一种高效处理不相交集合合并与查询的数据结构。并查集支持两种核心操作:合并(Union)和查询(Find),常用于处理图的连通性、集合合并等问题。
Union Find (...
📚 字典树详解:从字符串前缀搜索到LeetCode高频面试题
📚 字典树详解:从字符串前缀搜索到 LeetCode 高频面试题
英文标题 / English Title: Trie Data Structure: From Prefix Search to LeetCode Classics
来源 / Source: LeetCode Blog & 程序员吴师兄
📌 文章简介 / Introduction
字典树(也叫前缀树、Trie)是处理字符串相关问题的利器。它在面试中出现频率很高,尤其是配合回溯、DFS等技巧解决复杂问题时。本文中,我们将从零开始实现 Trie,并结合 LeetCode 高频面试题讲解实际应用。
The Trie (prefix tree) is a powerful data structure fo...
字典树 (Trie)
🧮 字典树 (Trie)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 字符串数据结构 (String Data Structure)
时间复杂度 / Time Complexity: O(m)(插入/查询,m为字符串长度)
空间复杂度 / Space Complexity: O(Σm·L)(字符数 × 平均长度)
📖 算法简介 / Introduction
字典树(Trie,源自 Retrieval 一词)是一种树形数据结构,用于高效存储和检索字符串集合。字典树的核心思想是通过共享前缀来节省存储空间,特别擅长处理前缀相关的查询操作。
Trie (pronounced “try”) is a tree-based data ...
📚 分治策略详解:从归并排序到Strassen矩阵乘法
📚 分治策略详解:从归并排序到 Strassen 矩阵乘法
英文标题 / English Title: Divide and Conquer in Depth: From Merge Sort to Strassen’s Matrix Multiplication
来源 / Source: 算法导论 & 泊松不粘人
📌 文章简介 / Introduction
分治是算法设计中最强大的策略之一。本文通过归并排序、Karatsuba 乘法、Strassen 矩阵乘法等多个经典案例,深入剖析分治的思想本质,以及如何分析分治算法的时间复杂度。
Divide and Conquer is one of the most powerful strategies in algo...
分治算法 (Divide and Conquer)
🧮 分治算法 (Divide and Conquer)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 算法设计范式 (Algorithm Design Paradigm)
时间复杂度 / Time Complexity: O(n log n) 或 O(n)
空间复杂度 / Space Complexity: O(n) 或 O(log n)
📖 算法简介 / Introduction
分治算法是一种将复杂问题分解为若干个相似的子问题,递归求解子问题,再合并结果得到原问题解的算法思想。分治的核心在于”分而治之”,把大问题拆成小问题分别解决。
Divide and Conquer is an algorithmic paradig...
贪心算法 (Greedy Algorithm)
🧮 贪心算法 (Greedy Algorithm)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 算法优化 (Optimization Algorithm)
时间复杂度 / Time Complexity: O(n log n) 或 O(n)
空间复杂度 / Space Complexity: O(n) 或 O(1)
📖 算法简介 / Introduction
贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)选择,从而希望最终得到全局最优解的算法思想。贪心算法不考虑整体最优,而是通过局部最优推导全局最优。
Greedy Algorithm is an algorithmic paradigm that makes...
📚 深入理解贪心算法:从活动选择到哈夫曼编码
📚 深入理解贪心算法:从活动选择到哈夫曼编码
英文标题 / English Title: Deep Dive into Greedy Algorithms: From Activity Selection to Huffman Coding
来源 / Source: 算法爱好者 & LeetCode Blog
📌 文章简介 / Introduction
贪心算法是面试中的高频考点,也是理解算法思维的重要一环。本文从经典的”活动选择问题”出发,深入讲解贪心算法的核心思想、正确性证明方法,以及霍夫曼编码等高级应用。
Greedy algorithms are a favorite topic in technical interviews. This article ...
📚 回溯算法完全指南:从入门到精通
📚 回溯算法完全指南:从入门到精通
英文标题 / English Title: Complete Guide to Backtracking Algorithms
来源 / Source: GeeksforGeeks
📌 文章简介 / Introduction
回溯算法是解决组合优化问题的利器。本文深入讲解回溯的思想、应用场景及经典题目。
Backtracking is a powerful technique for solving combinatorial optimization problems. This article provides an in-depth exploration of backtracking concepts, application...
回溯算法 (Backtracking)
🧮 回溯算法 (Backtracking)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 算法搜索 (Search Algorithm)
时间复杂度 / Time Complexity: O(n!)
空间复杂度 / Space Complexity: O(n)
📖 算法简介 / Introduction
回溯算法是一种通过枚举所有可能候选解来找到解的算法思想,采用递归方式构建解的候选集,遇到不满足条件时回退(撤销选择)继续搜索。
Backtracking is an algorithmic technique that finds all possible solutions by recursively building ...
📚 算法复杂度分析:时间与空间的权衡
📚 算法复杂度分析:时间与空间的权衡
英文标题 / English Title: Algorithm Complexity Analysis: Time-Space Tradeoff
来源 / Source: GeeksforGeeks
📌 文章简介 / Introduction
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点 / Key Points
深入理解核心概念
结合实例理解原理
多动手实践练习
*每日精选,持续更新
Curated daily*
动态规划 (Dynamic Programming)
🧮 动态规划 (Dynamic Programming)
难度 / Difficulty: 困难 (Hard)
分类 / Category: 算法思想 (Algorithm Paradigm)
时间复杂度 / Time Complexity: O(n)
空间复杂度 / Space Complexity: O(n) 或 O(1)
📖 算法简介 / Introduction
动态规划是一种将复杂问题分解为更小子问题的算法思想,通过存储子问题避免重复计算。
DP is an algorithm paradigm that decomposes complex problems into subproblems, storing results to avoid redun...
精选文章 - 算法学习第35天|Algorithm Picks
📚 精选文章 - 算法学习第35天
English Title: Algorithm Picks — Day 35
Graph Algorithms Deep Dive
📌 图算法:理解世界的另一种语言
图算法(Graph Algorithms)是计算机科学中最强大、最实用的分支之一。从社交网络的好友推荐,到地图导航的最短路径,再到任务调度的优先级排序,图算法无处不在。掌握它,你就拥有了一双看穿复杂关系的慧眼。
核心概念回顾 / Core Concepts:
图的表示 Representation:邻接矩阵(Adjacency Matrix)vs 邻接表(Adjacency List),选择取决于场景
B...
精选文章 - 算法学习第34天|Algorithm Picks
📚 精选文章 - 算法学习第34天
English Title: Algorithm Picks — Day 34
Mastering Data Structures & Algorithms
📌 数据结构与算法的关系:你真的理解了吗?
很多人在学习数据结构(Data Structures)和算法(Algorithms)时,容易把它们割裂开来。但事实上,数据结构是算法的基石,选择合适的数据结构能让算法效率提升数倍甚至更多。理解两者的关系,是从”刷题者”进化为”工程师”的关键一步。
核心要点回顾 / Core Points:
数组 Array:随机访问 O(1),插入删除 O(n),适合读多写少场景
...
精选文章 - 算法学习第33天|Algorithm Picks
📚 精选文章 - 算法学习第33天
English Title: Algorithm Picks — Day 33
Curated Algorithm Learning Resources
📌 为什么要掌握算法复杂度分析?
算法复杂度分析(Algorithm Complexity Analysis)是评估算法性能的核心技能。很多初学者只关注代码能否跑通,却忽略了时间复杂度(Time Complexity)和空间复杂度(Space Complexity)这对孪生指标。掌握复杂度分析,才能写出真正高效的代码,这也是面试中的必考内容。
核心概念回顾 / Key Concepts:
时间复杂度 Time Comple...
精选文章 - 算法学习第12天|Algorithm Picks
精选文章 - 算法学习第12天(续)
进阶算法学习资源推荐
1. 宫水三叶的刷题笔记 - 动态规划专题
宫水三叶(三叶解题)是我个人极力推荐的中文算法博主。她的刷题笔记在 GitHub 上广受好评,尤其擅长 动态规划(Dynamic Programming, DP) 的讲解。DP 是算法面试中的重中之重,也是很多同学的噩梦——但她的讲解逻辑清晰、层层递进,能帮你真正理解 DP 的核心思想。
推荐理由:她的笔记不只给答案,而是从 状态定义(State Definition) 开始,解释为什么这样定义、转移方程(Transition Function)怎么来的。很多同学做 DP 题是背套路,她教的则是思考方式。
适合人群:DP 入门困难户、想提升解题思维深度的同学。
2. ...
精选文章 - 算法学习第12天|Algorithm Picks
精选文章 - 算法学习第12天
算法学习资源推荐
1. LeetCode Explore 数组专项
LeetCode Explore 是刷题入门的绝佳起点,其中的 Array 专项覆盖了面试中最常见的数组操作题型。从二分查找(Binary Search)到滑动窗口(Sliding Window),从前缀和(Prefix Sum)到二维数组遍历,路径清晰、难度递进。
推荐理由:每个知识点都配有详细的文字讲解和配套练习题,题目按照 Easy / Medium / Hard 分级,适合零基础学习者循序渐进。每道题都有精选的社区题解,帮助你理解不同解法的思路与权衡。
适合人群:刚开始准备算法面试的同学,或者想系统过一遍数组基础的同学。
2. 《算法导论》第三章 - 渐进记号与函...
🧮 队列 (Queue)
🧮 队列 (Queue)
难度 / Difficulty: 简单 (Easy)
分类 / Category: 数据结构 (Data Structure)
操作复杂度 / Operations: 全部 O(1)
空间复杂度 / Space Complexity: O(n)
📖 算法简介 / Introduction
队列是一种先进先出(First In First Out, FIFO)的数据结构。就像排队买东西,先来的人先服务。
A queue is a First In First Out (FIFO) data structure. Like a line at a store — people who arrive first are served first....
🧮 计数排序 (Counting Sort)
🧮 计数排序 (Counting Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 非比较排序 (Non-comparison Sort)
时间复杂度 / Time Complexity: O(n + k)
空间复杂度 / Space Complexity: O(k)
📖 算法简介 / Introduction
计数排序是一种非比较排序算法,通过统计每个元素出现的次数来排序。不是比较元素大小,而是用计数数组记录每个值出现的频率。
Counting sort is a non-comparison sorting algorithm that sorts by counting the occurrences of e...
🧮 桶排序 (Bucket Sort)
🧮 桶排序 (Bucket Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 非比较排序 (Non-comparison Sort)
时间复杂度 / Time Complexity: O(n + k) 平均,O(n²) 最坏
空间复杂度 / Space Complexity: O(n + k)
📖 算法简介 / Introduction
桶排序是一种分布式排序算法,将数据分散到多个”桶”中,每个桶内单独排序,最后按顺序合并所有桶的结果。
Bucket sort is a distribution-based sorting algorithm that distributes elements into multip...
🧮 栈 (Stack)
🧮 栈 (Stack)
难度 / Difficulty: 简单 (Easy)
分类 / Category: 数据结构 (Data Structure)
操作复杂度 / Operations: 全部 O(1)
空间复杂度 / Space Complexity: O(n)
📖 算法简介 / Introduction
栈是一种后进先出(Last In First Out, LIFO)的数据结构。就像一叠盘子,只能从最上面放和取。
A stack is a Last In First Out (LIFO) data structure. Like a stack of plates — you can only add or remove from the top.
核心...
🧮 广度优先搜索 (BFS)
🧮 广度优先搜索 (BFS)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 图遍历 (Graph Traversal)
时间复杂度 / Time Complexity: O(V + E)
空间复杂度 / Space Complexity: O(V)
📖 算法简介 / Introduction
广度优先搜索是一种层次遍历算法,从起点开始,先访问所有邻居节点,再向外扩展。类似于水面上的涟漪,一圈一圈向外扩散。
BFS is a level-order traversal algorithm that starts from a source node and explores all neighbor nodes first b...
🧮 希尔排序 (Shell Sort)
🧮 希尔排序 (Shell Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 插入排序改进 (Insertion Sort Variant)
时间复杂度 / Time Complexity: O(n^1.3) ~ O(n²)
空间复杂度 / Space Complexity: O(1)
📖 算法简介 / Introduction
希尔排序是插入排序的改进版本,由 Donald Shell 于 1959 年提出。核心思想是设置递减的间隔,先对间隔较大的子序列进行排序(让元素快速移动到正确位置),逐步减少间隔直到 1。
Shell sort is an improved version of insertion sort...
🧮 基数排序 (Radix Sort)
🧮 基数排序 (Radix Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 非比较排序 (Non-comparison Sort)
时间复杂度 / Time Complexity: O(d × (n + k))
空间复杂度 / Space Complexity: O(n + k)
📖 算法简介 / Introduction
基数排序是一种非比较排序算法,按位数逐个进行排序。从最低位开始,按当前位将数据分配到 0-9 共 10 个桶中,收集后再按下一位排序,直到最高位完成。
Radix sort is a non-comparison sorting algorithm that sorts by each digi...
🧮 哈希表 (Hash Table)
🧮 哈希表 (Hash Table)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 数据结构 (Data Structure)
时间复杂度 / Time Complexity: 平均 O(1),最坏 O(n)
空间复杂度 / Space Complexity: O(n)
📖 算法简介 / Introduction
哈希表是一种通过哈希函数将键(Key)映射到数组索引位置的数据结构。在理想情况下,查找、插入和删除操作的时间复杂度都是 O(1)。
A hash table is a data structure that maps keys to array indices via a hash function. In the...
🧮 动态规划 (Dynamic Programming)
🧮 动态规划 (Dynamic Programming)
难度 / Difficulty: 困难 (Hard)
分类 / Category: 算法思想 (Algorithm Paradigm)
时间复杂度 / Time Complexity: O(n) ~ O(n²)
空间复杂度 / Space Complexity: O(n) 或 O(1)
📖 算法简介 / Introduction
动态规划(DP)是一种将复杂问题分解为更小子问题,并通过存储子问题结果避免重复计算的算法思想。核心条件:最优子结构 + 重叠子问题。
Dynamic Programming is an algorithm paradigm that decomposes complex proble...
📚 回溯算法详解:解决组合优化问题
📚 回溯算法详解:解决组合优化问题
英文标题 / English Title: Backtracking Algorithm: Solving Combinatorial Problems
来源 / Source: GeeksforGeeks
📌 文章简介 / Introduction
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点 / Key Points
深入理解核心概念
结合实例理解原理
多动手实践练习
*每日精选,持续更新
Curated daily*
Dijkstra算法 (Dijkstra Algorithm)
🧮 Dijkstra算法 (Dijkstra Algorithm)
难度 / Difficulty: 困难 (Hard)
分类 / Category: 最短路径 (Shortest Path)
时间复杂度 / Time Complexity: O((V + E) log V)
空间复杂度 / Space Complexity: O(V)
📖 算法简介 / Introduction
Dijkstra 算法是用于计算单源最短路径的贪心算法,适用于非负权边。
Dijkstra is a greedy algorithm for single-source shortest path in graphs with non-negative edge weights.
...
拓扑排序 - 处理有依赖关系的排序|Topological Sort
什么是拓扑排序?
拓扑排序(Topological Sort)是对有向无环图(DAG, Directed Acyclic Graph) 中的顶点进行排序的算法,使得所有有向边都从排在前面的顶点指向后面的顶点。
简单来说:如果任务 A 依赖任务 B,那么 B 必须排在 A 前面。拓扑排序就是找出这个先后顺序的算法。
注意:只有 DAG 才有拓扑排序,图中存在环则无法排序。
Kahn 算法(BFS 方法)
最常用的拓扑排序算法是 Kahn 算法,核心思想是:
计算每个顶点的入度(有多少边指向它)
将所有入度为 0 的顶点加入队列(这些是没有依赖的起始任务)
从队列取出一个顶点,将其加入排序结果
将该顶点指向的所有顶点的入度减 1
如果有顶点的入度变为 ...
回溯算法 - 经典搜索与优化利器|Backtracking Algorithm
回溯算法(Backtracking)—— 枚举的艺术与剪枝的智慧
回溯算法(Backtracking)是一种通过枚举(Enumerate) 来寻找问题解的通用算法策略。它的核心思想非常直观:沿着一条路径走下去,如果发现这条路走不通(不满足约束条件),就退回到上一步(回溯),尝试其他路径。这与我们小时候玩迷宫游戏时”碰壁就退回去重走”的经验如出一辙。
回溯本质上是一种深度优先搜索(Depth-First Search, DFS) 的增强版,区别在于它会在搜索过程中不断剪枝(Pruning)——即提前排除那些明显不可能产生有效解的分支,从而避免无效搜索,大幅提升效率。可以说,回溯算法 = DFS + 剪枝 = 暴力枚举的智能优化版本。
回溯算法特别擅长解决组合(Combination...
📚 排序算法全面对比分析
📚 排序算法全面对比分析
英文标题 / English Title: Comprehensive Comparison of Sorting Algorithms
来源 / Source: Toptal
📌 文章简介 / Introduction
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点 / Key Points
深入理解核心概念
结合实例理解原理
多动手实践练习
*每日精选,持续更新
Curated daily*
深度优先搜索 (Depth-First Search (DFS))
🧮 深度优先搜索 (Depth-First Search (DFS))
难度 / Difficulty: 中等 (Medium)
分类 / Category: 图遍历 (Graph Traversal)
时间复杂度 / Time Complexity: O(V + E)
空间复杂度 / Space Complexity: O(V)
📖 算法简介 / Introduction
深度优先搜索是一种Graph/树遍历算法,沿着一条路径走到底,然后回溯探索其他路径。
DFS is a graph/tree traversal algorithm that explores as far as possible along each branch before backtra...
📚 图论基础:从入门到实战
📚 图论基础:从入门到实战
英文标题 / English Title: Graph Theory: From Basics to Practice
来源 / Source: VisuAlgo
📌 文章简介 / Introduction
图论是算法中最核心的主题之一,无论是社交网络分析、路径规划还是任务调度,图都是非常重要的抽象工具。
🔍 内容要点 / Key Points
图的基本概念:顶点、边、有向/无向、加权/无权
图的存储方式:邻接矩阵、邻接表、链式前向星
图的遍历:DFS(深度优先)和 BFS(广度优先)
最短路径:Dijkstra、Bellman-Ford、Floyd
连通分量:并查集、Tarjan算法
🛠️ 实战建议
...
🧮 归并排序 (Merge Sort)
🧮 归并排序 (Merge Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n log n)
空间复杂度 / Space Complexity: O(n)
📖 算法简介 / Introduction
归并排序是采用分治策略的稳定排序算法,将数组递归分成小数组,排序后合并。稳定性是其最大优势——相等的元素不会被交换位置。
归并排序的核心思想:分而治之。将数组不断拆分到只剩一个元素,然后两两合并排序。
💡 算法原理 / Principle
分解:将数组从中间分成两半,递归分解直到每部分只有一个元素
解决:对每对分离的数组进...
📚 算法复杂度分析:时间与空间的权衡
📚 算法复杂度分析:时间与空间的权衡
英文标题 / English Title: Algorithm Complexity Analysis: Time-Space Tradeoff
来源 / Source: GeeksforGeeks
📌 文章简介 / Introduction
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点 / Key Points
深入理解核心概念
结合实例理解原理
多动手实践练习
*每日精选,持续更新
Curated daily*
快速排序 (Quick Sort)
🧮 快速排序 (Quick Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n log n)
空间复杂度 / Space Complexity: O(log n)
📖 算法简介 / Introduction
快速排序是一种高效的分治排序算法,采用递归和分区策略。
Quick sort is an efficient divide-and-conquer sorting algorithm using recursion and partitioning.
💡 算法原理 / Principle
选择一个基准元素,将数组分为两部分,...
📚 动态规划思维训练
📚 动态规划思维训练
英文标题: Dynamic Programming Mindset
来源 / Source: Medium
📌 文章简介
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点
深入理解核心概念
结合实例理解原理
多动手实践练习
每日精选,持续更新
🧮 插入排序 (Insertion Sort)
🧮 插入排序 (Insertion Sort)
难度 / Difficulty: 简单 (Easy)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n²)
空间复杂度 / Space Complexity: O(1)
📖 算法简介 / Introduction
插入排序类似于打牌时整理手牌的过程,将每个元素插入到已排序序列的适当位置。
Insertion sort works like arranging playing cards - insert each element into its correct position in the sorted portion.
💡 算法原理 / Pri...
冒泡排序 (Bubble Sort)
🧮 冒泡排序 (Bubble Sort)
难度 / Difficulty: 简单 (Easy)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n²)
空间复杂度 / Space Complexity: O(1)
📖 算法简介 / Introduction
冒泡排序是一种简单的排序算法,通过相邻元素的比较和交换将最大(或最小)的元素逐步冒泡到序列的一端。
Bubble sort is a simple sorting algorithm that repeatedly steps through the list, compares adjacent elements and swaps them if ...
🧮 选择排序 (Selection Sort)
🧮 选择排序 (Selection Sort)
难度 / Difficulty: 简单 (Easy)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n²)
空间复杂度 / Space Complexity: O(1)
📖 算法简介 / Introduction
选择排序是一种简单直观的排序算法,每一轮从未排序部分选出最小(或最大)元素放到已排序部分。
Selection sort is a simple algorithm that repeatedly selects the minimum from the unsorted portion.
💡 算法原理 / Principle
每轮在未排...
📚 LeetCode刷题指南
📚 LeetCode刷题指南
英文标题: LeetCode Practice Guide
来源 / Source: LeetCode
📌 文章简介
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点
深入理解核心概念
结合实例理解原理
多动手实践练习
每日精选,持续更新
快速排序 (Quick Sort)
🚀 快速排序 (Quick Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: 平均 O(n log n),最坏 O(n²)
空间复杂度 / Space Complexity: O(log n)
📖 算法简介 / Introduction
快速排序是一种分治排序算法,通过选择基准元素将数组划分为两部分,递归排序。
Quick Sort is a divide-and-conquer sorting algorithm that partitions the array around a pivot element and recursively...
📚 排序算法全面对比分析
📚 排序算法全面对比分析
英文标题: Comprehensive Sorting Algorithm Comparison
来源 / Source: Toptal
📌 文章简介
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点
深入理解核心概念
结合实例理解原理
多动手实践练习
每日精选,持续更新
🧮 堆排序 (Heap Sort)
🧮 堆排序 (Heap Sort)
难度 / Difficulty: 中等 (Medium)
分类 / Category: 排序 (Sorting)
时间复杂度 / Time Complexity: O(n log n)
空间复杂度 / Space Complexity: O(1)
📖 算法简介 / Introduction
堆排序是利用堆这种数据结构设计的排序算法,是一种原地、时间复杂度O(n log n)的排序算法。
Heap sort is a comparison-based sorting algorithm that uses a binary heap data structure.
💡 算法原理 / Principle
将数组构建为最大堆(或...
Dijkstra算法 (Dijkstra Algorithm)
🧮 Dijkstra算法 (Dijkstra Algorithm)
难度 / Difficulty: 困难 (Hard)
分类 / Category: 最短路径 (Shortest Path)
时间复杂度 / Time Complexity: O((V + E) log V)
空间复杂度 / Space Complexity: O(V)
📖 算法简介 / Introduction
Dijkstra 算法是用于计算单源最短路径的贪心算法,适用于非负权边。
Dijkstra is a greedy algorithm for single-source shortest path in graphs with non-negative edge weights.
...
📚 算法复杂度分析:时间与空间的权衡
📚 算法复杂度分析:时间与空间的权衡
英文标题: Algorithm Complexity Analysis
来源 / Source: GeeksforGeeks
📌 文章简介
这是一篇精选的算法相关文章,建议认真学习:
👉 阅读原文: 点击访问
🔍 内容要点
深入理解核心概念
结合实例理解原理
多动手实践练习
每日精选,持续更新
🧮 二分查找 (Binary Search)
🧮 二分查找 (Binary Search)
难度 / Difficulty: 简单 (Easy)
分类 / Category: 查找 (Search)
时间复杂度 / Time Complexity: O(log n)
空间复杂度 / Space Complexity: O(1)
📖 算法简介 / Introduction
二分查找是一种在有序数组中查找目标元素的搜索算法,每次将搜索范围缩小一半。
Binary search finds the target in a sorted array by halving the search range each time.
💡 算法原理 / Principle
在有序数组中,取中间元素与目标比较:根据大小关系...
🧮 算法专栏
🧮 Algorithms
从基础到复杂,每日精讲一个算法