算法专栏

精选文章 - 算法学习第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) 算法原理 将复杂问题分解为更小子问题,通过存储子问题避免重复计算。 代码实现 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 自动生成

阅读更多

精选文章

📚 精选阅读 LeetCode 1584 - 连接所有点的最小费用 难度:中等 MST 基础应用 链接:https://leetcode.cn/problems/min-cost-to-connect-all-points/ LeetCode 1167 - 连接棒料棒的最小成本 难度:中等 ...

阅读更多

精选文章

📚 精选阅读 LeetCode 307 - 区域和检索 - 数组可修改 难度:中等 树状数组基础题 链接:https://leetcode.cn/problems/range-sum-query-mutable/ LeetCode 315 - 计算右侧小于当前元素的个数 难度:困难 ...

阅读更多

📚 并查集详解:从入门到 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

从基础到复杂,每日精讲一个算法

From Basics to Advanced, Daily Algorithm Deep Dive