
算法OJ
文章平均质量分 81
从数据结构到算法,解决精选OJ题目,使用C++和JavaScript解题,分析复杂度,举一反三。
Vitalia
Rebuild the world with 0s and 1s.
展开
-
⭐算法OJ⭐数据流的中位数【最小堆】Find Median from Data Stream
最小堆是一种特殊的完全二叉树数据结构,它满足以下性质:堆性质:每个节点的值都小于或等于其子节点的值(根节点是最小值);完全二叉树性质:除了最底层外,其他层的节点都是满的,且最底层的节点都靠左排列。原创 2025-04-08 23:49:20 · 543 阅读 · 0 评论 -
⭐算法OJ⭐滑动窗口最大值【双端队列(deque)】Sliding Window Maximum
双端队列(deque,全称double-ended queue)是C++标准模板库(STL)中的一个容器适配器,它允许在队列的两端高效地进行插入和删除操作。滑动窗口最大值是一个经典的算法问题,我们需要找到数组中每个大小为k的滑动窗口中的最大值。我们可以使用双端队列(deque)来高效解决这个问题。主要思路是维护一个双端队列,队列中存储的是数组元素的索引,且队列中的元素按照从大到小的顺序排列。这样可以保证队列前端始终是当前窗口的最大值。原创 2025-04-07 23:37:42 · 341 阅读 · 0 评论 -
哈密尔顿路径(Hamiltonian Path)及相关算法题目
哈密尔顿路径(Hamiltonian Path)是指在一个图中经过每个顶点恰好一次的路径。哈密尔顿路径(Hamiltonian Path)问题是一个经典的 NP-Complete 问题,意味着目前没有已知的多项式时间解法(除非 P=NP)。但在实际应用中,我们可以采用以下几种方法进行求解:回溯法(Backtracking):尝试所有可能的路径,遇到无效路径时回溯;动态规划(DP + 状态压缩):用二进制位掩码表示已访问的顶点集合,DP存储状态。原创 2025-04-04 23:39:38 · 672 阅读 · 0 评论 -
⭐算法OJ⭐寻找最短超串【动态规划 + 状态压缩】(C++ 实现)Find the Shortest Superstring
这个问题要求找到一个最短的字符串,使得给定的所有字符串都是它的子串。我们可以将其转化为旅行商问题(TSP)的变种:将每个字符串视为一个城市,字符串间的重叠部分视为路径权重。通过动态规划,我们记录使用不同字符串组合(状态压缩)时的最优解,逐步构建包含更多字符串的超级字符串,最终回溯得到最短结果。该解法利用状态压缩DP高效处理这个NP难问题,时间复杂度为O(n²·2ⁿ),适用于较小规模的输入(n≤20)。原创 2025-04-04 23:28:09 · 816 阅读 · 0 评论 -
⭐算法OJ⭐重建行程【哈密尔顿路径】(C++ 实现)Reconstruct Itinerary
重建行程问题要求从"JFK"出发,按字典序最小顺序使用所有机票。核心解法是采用Hierholzer算法寻找欧拉路径:建图:用优先队列(最小堆)构建邻接表,确保每次取字典序最小的目的地;DFS遍历:从JFK出发深度优先搜索,递归访问邻接节点;后序处理:当节点无出边时加入结果,最后反转结果列表。关键点:优先队列保证字典序、后序处理确保路径完整、反转得到正确顺序。算法时间复杂度O(ElogE),空间复杂度O(E),能高效找到最优解。原创 2025-04-04 10:46:19 · 801 阅读 · 0 评论 -
⭐算法OJ⭐ 戳气球【动态规划】Burst Balloons
戳气球问题要求通过最优顺序戳破气球以获得最大硬币数量,关键在于逆向思维——最后戳破的气球会将问题分解为独立的子问题。采用动态规划中的区间DP方法,定义 dp[i][j] 为戳破开区间 (i,j) 内气球的最大收益,并通过首尾添加虚拟气球简化边界处理。通过三重循环递推计算不同区间的最大值,最终在 O(n³) 时间内解决问题,典型地体现了动态规划对重叠子问题和最优子结构的高效处理。原创 2025-03-31 00:27:40 · 280 阅读 · 0 评论 -
⭐算法OJ⭐俄罗斯套娃信封问题【排序 + LIS】Russian Doll Envelopes
本题通过排序 + LIS的经典组合,将二维问题转化为一维问题。按宽度升序、高度降序排序,避免同一宽度的信封被重复选择。使用贪心 + 二分优化 LIS,将时间复杂度从 O(N^2 ) 降为 O(NlogN)。原创 2025-03-30 11:52:21 · 700 阅读 · 0 评论 -
力扣百大算法题精选【Hard 模式】Top 100 Liked LeetCode
"刷了300道题,面试还是被Hard题秒杀?" —— 这可能是许多LeetCode练习者的真实噩梦。当你自信满满地走进面试间,面试官却抛出一道《俄罗斯套娃信封》或《戳气球》,瞬间让你体会到什么叫"题目都看得懂,代码却无从下手"的绝望。博主在当年面试菊厂之前刷了大量Medium的题目和部分Hard的题目,面试时体感非常良好,可见平时练的难,考试就能考得好!原创 2025-03-29 06:59:39 · 1349 阅读 · 0 评论 -
⭐算法OJ⭐并查集的应用/DFS/BFS:省份数量问题 Number of Provinces
并查集(Union-Find)是一种树型的数据结构,用于处理一些不交集合(Disjoint Sets)的合并及查询问题。在省份数量问题中:每个城市最初属于自己独立的省份(即自己是自己的父节点);当两个城市相连时,我们合并它们所在的省份;最终,剩余的独立集合数量就是省份的总数。原创 2025-03-29 05:13:25 · 849 阅读 · 0 评论 -
⭐算法OJ⭐二叉树的直径【树】(C++实现)Binary Tree Paths
给定一棵二叉树的根节点 root,返回这棵树的直径长度。二叉树的直径是指树中任意两个节点间最长路径的长度。这个路径可能穿过也可能不穿过根节点。两个节点之间的路径长度由它们之间的边数表示。我们可以使用深度优先搜索(DFS)来递归地计算每个节点的左右子树的最大深度,并在过程中更新最大直径。直径的长度可以看作是左子树的深度加上右子树的深度(即穿过当前节点的最长路径)。原创 2025-03-25 11:45:44 · 743 阅读 · 0 评论 -
⭐算法OJ⭐二叉树的坡度【树的遍历】(C++实现)Binary Tree Tilt
二叉树的坡度(Tilt)问题本身是一个经典的算法练习题,主要用于帮助理解二叉树的递归遍历和节点值的计算。原创 2025-03-24 11:27:32 · 400 阅读 · 0 评论 -
⭐算法OJ⭐二叉树摄像头【树的遍历+动态规划】(C++实现)Binary Tree Cameras
给定一棵二叉树的根节点,需要在树的节点上安装摄像头。每个摄像头可以监控其父节点、自身以及其直接子节点。要求返回监控整棵树所需的最小摄像头数量。这个问题可以通过贪心算法和动态规划来解决。我们需要遍历树,并为每个节点决定是否安装摄像头。为了最小化摄像头的数量,采用自底向上的策略,从叶子节点开始向上处理。原创 2025-03-23 09:00:00 · 946 阅读 · 0 评论 -
⭐算法OJ⭐判断二叉搜索树【树的遍历】(C++实现)Validate Binary Search Tree
二叉搜索树(BST)有一个非常重要的性质:中序遍历的结果是一个严格递增的序列。如果对一棵二叉搜索树进行中序遍历(Inorder Traversal),得到的节点值的序列一定是从小到大严格递增的。要判断一棵二叉树是否是有效的二叉搜索树(BST),可以利用 BST 的这个性质。原创 2025-03-22 02:02:59 · 590 阅读 · 0 评论 -
⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal
要实现对二叉树的后序遍历(Postorder Traversal),我们可以使用递归或迭代的方法。后序遍历的顺序是:左子树 -> 右子树 -> 根节点。原创 2025-03-20 23:46:41 · 1084 阅读 · 0 评论 -
⭐算法OJ⭐二叉树的前序遍历【树的遍历】(C++实现)Binary Tree Preorder Traversal
要实现二叉树的前序遍历(Preorder Traversal),我们可以使用递归或迭代的方法。前序遍历的顺序是:根节点 -> 左子树 -> 右子树。原创 2025-03-20 11:07:05 · 487 阅读 · 0 评论 -
⭐算法OJ⭐二叉树的中序遍历【树的遍历】(C++实现)Binary Tree Inorder Traversal
树是一种非常简洁的图结构,具有许多有趣的性质和应用。本文介绍二叉树的中序遍历。中序遍历的顺序是:左子树 -> 根节点 -> 右子树。两种实现分别是递归解法,和迭代解法,即使用栈模拟递归过程。原创 2025-03-19 23:49:14 · 812 阅读 · 0 评论 -
⭐算法OJ⭐是否是二分图【BFS】(C++实现)Is Graph Bipartite?
要判断一个无向图是否是二分图(Bipartite),我们可以使用图的着色方法。具体思路是:尝试用两种颜色(例如 0 和 1)对图中的节点进行着色,确保相邻节点颜色不同。如果能够成功完成着色,则图是二分图;否则,不是二分图。原创 2025-03-17 23:54:38 · 861 阅读 · 0 评论 -
⭐算法OJ⭐克隆图【BFS】(C++实现)Clone Graph
要克隆一个无向连通图,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历图,并在遍历过程中创建每个节点的副本。为了确保每个节点只被复制一次,我们可以使用一个哈希表(或字典)来存储已经复制过的节点。此文给出使用C++实现的BFS方法。原创 2025-03-17 23:41:49 · 956 阅读 · 0 评论 -
⭐算法OJ⭐两数之和【哈希表】(C++ 实现)Two Sum
“两数之和”(Two Sum)是一道非常经典的算法题目,几乎是算法入门和面试准备的必做题之一。这道题目是许多初学者接触哈希表(Hash Table)或字典(Dictionary)的第一个应用场景。它帮助初学者理解如何通过空间换时间,将时间复杂度从暴力解法的 O(n²) 优化到 O(n)。原创 2025-03-16 12:10:35 · 963 阅读 · 0 评论 -
⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Total Hamming Distance
Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。原创 2025-03-14 11:07:59 · 859 阅读 · 0 评论 -
⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance
Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。原创 2025-03-13 23:43:03 · 983 阅读 · 0 评论 -
⭐算法OJ⭐因数游戏【动态规划】Divisor Game
Alice 和 Bob 在玩一个游戏,Alice 先手。初始时,黑板上有一个数字 n。每轮玩家需要执行以下操作:选择一个满足 0 < x < n 且 n % x == 0 的数字 x。将黑板上的数字 n 替换为 n - x。如果玩家无法执行操作(即没有满足条件的 x),则该玩家输掉游戏。假设 Alice 和 Bob 都采取最优策略,判断 Alice 是否能赢得游戏。如果 Alice 能赢,返回 true;否则返回 false。原创 2025-03-13 00:39:36 · 769 阅读 · 0 评论 -
⭐算法OJ⭐判断链表是否有环【快慢指针】(C++实现)Linked List Cycle II
通过快慢指针法,我们可以高效地判断链表是否有环,并找到环的起始节点。这种方法不仅代码简洁,而且性能优秀,适合处理大规模数据。掌握快慢指针的思想对于解决类似的链表问题非常有帮助。原创 2025-03-12 09:15:00 · 484 阅读 · 0 评论 -
⭐算法OJ⭐找到链表的中间节点【快慢指针】(C++实现)Middle of the Linked List
通过快慢指针法,我们可以高效地找到链表的中间节点。这种方法不仅代码简洁,而且性能优秀,适合处理大规模数据。掌握快慢指针的思想对于解决类似的链表问题非常有帮助。原创 2025-03-11 22:55:48 · 821 阅读 · 0 评论 -
⭐算法OJ⭐判断链表是否有环【快慢指针】(C++实现)Linked List Cycle
通过快慢指针法,我们可以高效地判断链表是否有环。这种方法不仅代码简洁,而且性能优秀,适合处理大规模数据。掌握快慢指针的思想对于解决类似的链表问题非常有帮助。原创 2025-03-12 09:00:00 · 839 阅读 · 0 评论 -
⭐算法OJ⭐链表排序【归并排序】(C++/JavaScript 实现)
通过归并排序,我们可以高效地对链表进行排序。这种方法不仅时间复杂度低,而且空间复杂度也较为优秀,适合处理大规模数据。掌握链表的分割和合并技巧对于解决类似的链表问题非常有帮助。原创 2025-03-11 22:57:33 · 685 阅读 · 0 评论 -
⭐算法OJ⭐荷兰国旗问题【三指针法】(C++实现)
荷兰国旗问题的核心是如何高效地将一个包含三种元素的数组进行分区排序。这个问题在排序算法设计中具有重要意义,尤其是对于需要处理大量重复元素的排序算法(如快速排序的变种)。原创 2025-03-11 08:31:56 · 359 阅读 · 0 评论 -
⭐算法OJ⭐经典题目分类索引(持续更新)
在编程竞赛和算法学习中,Online Judge(OJ)平台是程序员们磨练技能的重要工具。OJ平台上的题目种类繁多,涵盖了从基础数据结构到复杂算法的各个方面。为了更好地理解和掌握这些题目,对其进行分类是非常有必要的。这篇索引文章会持续更新,欢迎大家点赞收藏!原创 2025-03-11 08:00:23 · 1580 阅读 · 0 评论 -
⭐算法OJ⭐全排列【回溯】(C++实现)Permutations II
通过回溯算法解决了全排列问题,使用递归和交换,生成所有可能的排列。原创 2025-03-07 09:15:00 · 201 阅读 · 0 评论 -
⭐算法OJ⭐全排列【回溯】(C++实现)Permutations
通过回溯算法解决了全排列问题,使用递归和交换,生成所有可能的排列。原创 2025-03-07 08:00:00 · 384 阅读 · 0 评论 -
⭐算法OJ⭐N-皇后问题 II【回溯剪枝】(C++实现)N-Queens II
通过回溯算法解决了 N-皇后问题,能够找到所有可能的解的个数。代码中使用了递归和剪枝技术,确保高效地搜索所有可能的棋盘配置。原创 2025-03-07 01:01:14 · 608 阅读 · 0 评论 -
⭐算法OJ⭐N-皇后问题【回溯剪枝】(C++实现)N-Queens
通过回溯算法解决了 N-皇后问题,能够找到所有可能的解。代码中使用了递归和剪枝技术,确保高效地搜索所有可能的棋盘配置。原创 2025-03-07 00:31:49 · 1183 阅读 · 0 评论 -
⭐算法OJ⭐最佳买卖股票时机(含“冷却期”或“交易费”)【动态规划 + 滚动窗口】(C++实现)Best Time to Buy and Sell Stock 系列
这一篇给大家分享两篇股票买卖系列的扩展题目,难度不太大,如果对这类问题不是很熟悉可以参考[⭐算法OJ⭐最佳买卖股票时机【贪心算法 + 动态规划】(C++实现)Best Time to Buy and Sell Stock 系列 I,II,III,IV]。我们分别提供了两种解法,一种是常规的动态规划,另一种是利用滚动窗口实现的O(1)空间复杂度的优化。原创 2025-03-06 00:40:51 · 1158 阅读 · 0 评论 -
⭐算法OJ⭐跳跃游戏【动态规划】(C++实现)Jump Game 系列 V
跳跃游戏V是一个典型的动态规划问题。我们需要找到从任意索引开始跳跃,最多可以访问的索引数量。原创 2025-03-05 12:14:29 · 760 阅读 · 0 评论 -
⭐算法OJ⭐跳跃游戏【动态规划 + 单调队列】(C++实现)Jump Game 系列 VI
这是一个典型的动态规划问题。我们需要找到从索引 0 到索引 n - 1 的最大得分路径。对于每个索引 i,我们需要检查从 [i - k, i - 1] 范围内的所有可能的前一个位置 j,并选择使得 dp[j] + nums[i] 最大的值。可以使用单调队列(Monotonic Queue)优化,将时间复杂度降低到 O(n)。原创 2025-03-05 11:55:38 · 835 阅读 · 0 评论 -
⭐算法OJ⭐跳跃游戏【BFS+滑动窗口】(C++实现)Jump Game 系列 III,VII
这篇文章介绍 **跳跃游戏** 的第三题和第七题,两道题目有异曲同工之妙,都运用了BFS广度优先搜索算法实现,难度相比于前两题较高,而且不同于更常见的在二维矩阵或者图中的BFS,一维的BFS更加抽象,同时也更能揭示算法的本质。我们一起来看看吧!原创 2025-03-04 12:13:27 · 1052 阅读 · 0 评论 -
为什么我选择 C++ 刷题,而不是 Python?
在算法竞赛和编程面试中,选择合适的编程语言至关重要。Python 以其简洁的语法和强大的库支持,成为了许多初学者的首选。然而,作为一名长期使用 C++ 刷题的开发者,我想从多个角度探讨为什么 C++ 可能是更好的选择,尤其是在算法竞赛和面试准备中。原创 2025-03-04 01:02:41 · 564 阅读 · 0 评论 -
⭐算法OJ⭐跳跃游戏【贪心算法】(C++实现)Jump Game 系列 I,II
既股票买卖系列之后的第二组贪心算法题目:跳跃游戏系列。这一篇介绍的两个问题,其输入均为一个数组,每个元素表示在该位置可以跳跃的最大长度。这类问题的关键在于维护当前跳跃范围和最远可到达位置,并在遍历过程中动态更新。原创 2025-03-04 00:45:56 · 1261 阅读 · 0 评论 -
⭐算法OJ⭐最佳买卖股票时机【贪心算法 + 动态规划】(C++实现)Best Time to Buy and Sell Stock 系列 I,II,III,IV
“股票买卖最佳时机”系列OJ题目集锦(四道),核心思想是贪心算法和动态规划。乍一看很难,但其实相对容易理解,在面试中考察的频率也更高。原创 2025-03-03 09:39:14 · 1655 阅读 · 0 评论 -
⭐算法OJ⭐正则表达式匹配【动态规划 DP】(C++实现)
这篇是动态规划系列中难度较高的一道题目。正则表达式匹配是一个经典的算法问题,通常用于判断一个字符串是否与给定的模式匹配。模式中可能包含普通字符和特殊字符(如 . 和 *)。以下是正则表达式匹配问题描述和解决方案,包括问题分析、动态规划思路和代码实现。原创 2025-03-03 07:21:47 · 462 阅读 · 0 评论