
算法
文章平均质量分 79
一个憨憨coder
热爱
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法题 多个数组求交集
多个数组求交集问题摘要 本文介绍了求解多个数组交集的三种方法: 哈希表计数法(推荐): 统计每个数字在多少个数组中出现 对每个数组去重后计数 出现频次等于数组总数的数字即为交集 时间复杂度O(N+UlogU),空间复杂度O(U) 逐个求交集法: 从第一个数组开始作为初始交集 依次与后续数组求交集 使用集合的retainAll操作 时间复杂度O(N+UlogU),空间复杂度O(U) 位运算法(数值范围小时适用): 为每个数组创建位向量 按位与所有位向量 为1的位对应交集元素 三种方法各有优势,推荐使用哈希表计原创 2025-08-02 10:32:02 · 428 阅读 · 0 评论 -
算法题 两个数组的交集 II
本文介绍了三种解决"两个数组的交集II"问题的算法: 哈希表计数法(推荐):统计第一个数组元素频率,遍历第二个数组匹配并计数,保证结果元素出现次数等于两数组较小值。时间复杂度O(m+n),空间O(min(m,n))。 排序+双指针法:先排序两数组,再用双指针逐个比较,相等时加入结果。时间复杂度O(m log m + n log n),空间复杂度低,适合内存受限场景。 短数组计数法(空间优化):选择较短数组构建哈希表,减少空间使用。时间复杂度O(m+n),空间O(min(m,n))。 三种原创 2025-08-02 10:10:01 · 460 阅读 · 0 评论 -
算法题 两个数组的交集
摘要 给定两个整数数组,求它们的交集(元素唯一)。有三种主要解法: 哈希集合法(推荐):将第一个数组存入哈希表,遍历第二个数组检查是否存在,时间复杂度O(m+n),空间O(m)。 排序+双指针法:先排序两个数组,用双指针遍历比较元素,空间效率更高但需要排序,时间复杂度O(m log m + n log n)。 内置集合操作:利用语言特性直接求集合交集,代码简洁但依赖特定API。 哈希集合法在速度和可读性上表现最佳,而排序法适合内存受限场景。实际应用中可根据具体需求选择合适的方法。原创 2025-08-02 09:51:20 · 319 阅读 · 0 评论 -
算法题 超级丑数
本文介绍了求解第n个超级丑数的两种主要方法。超级丑数是指其所有质因数都来自给定质数列表的正整数。第一种方法是多指针动态规划,通过维护指针数组跟踪每个质数的乘数位置,时间复杂度O(n×k),其中k是质数个数,空间复杂度O(n+k)。第二种方法使用最小堆和哈希集合去重,空间效率较低。文章详细说明了动态规划的核心思路:每个超级丑数由之前丑数乘以某个质数得到,通过指针数组避免重复计算。提供了三种实现代码:标准多指针DP、优化版本以减少重复计算,以及最小堆方法。动态规划方法因其高效性被推荐为最优解法。原创 2025-08-02 09:26:04 · 277 阅读 · 0 评论 -
算法题 丑数 II
摘要: 丑数是指只包含质因数2、3、5的正整数。本文介绍了两种求解第n个丑数的算法:1)三指针动态规划法,通过维护三个指针按序生成丑数,时间复杂度O(n);2)最小堆法,利用优先队列逐个生成丑数并去重,时间复杂度O(n log n)。动态规划法效率更高,推荐使用。示例展示了三指针法生成前10个丑数的过程,最终返回第10个丑数12。原创 2025-08-01 11:31:09 · 528 阅读 · 0 评论 -
算法题 丑数
本文介绍了判断丑数的算法。丑数是只包含质因数2、3、5的正整数,1被视为丑数。核心算法采用贪心除法:对于输入n,先处理边界情况(n≤0返回false,n=1返回true),然后不断除以2、3、5去除所有相关因子,最后检查剩余值是否为1。该方法时间复杂度O(log n),空间复杂度O(1)。文中提供了三种实现方式:循环除法(推荐)、递归解法和优化循环解法,并分析了各方法的优缺点。算法正确性基于算术基本定理,通过示例和测试用例验证了其有效性。关键点包括正确处理边界情况和贪心除法的正确性保证。原创 2025-08-01 11:01:05 · 673 阅读 · 0 评论 -
算法题 丢失的数字
本文介绍了四种方法解决"丢失的数字"问题(给定一个包含n个不同数字的数组,数字范围[0,n]恰好缺失一个数字)。推荐解法是数学求和公式法(时间复杂度O(n),空间O(1)),通过计算理论总和与实际总和的差得到缺失数字。异或法同样高效且无溢出风险。哈希法直观但空间复杂度较高,排序法效率最低。文章详细分析了各方法的优缺点,并提供了Java代码实现和测试用例,最后通过具体示例展示了算法的执行过程。原创 2025-08-01 10:40:49 · 459 阅读 · 0 评论 -
算法题 汇总区间
本文介绍了将已排序无重复整数数组转换为汇总区间的方法。算法使用双指针技术或单次遍历,识别连续数字区间,生成格式为"start->end"(多数字)或"start"(单数字)的字符串。时间复杂度O(n),空间复杂度O(1)。两种实现方式对比显示单次遍历更简洁高效,并通过示例和测试用例验证了算法的正确性。原创 2025-08-01 10:18:11 · 348 阅读 · 0 评论 -
动态规划 最大正方形
本文介绍了解决二维二进制矩阵中最大正方形问题的动态规划算法。给定一个由'0'和'1'组成的矩阵,算法通过构建dp数组记录以每个位置为右下角的最大正方形边长,状态转移方程为dp[i][j] = min(上,左,左上)+1。时间复杂度O(mn),空间复杂度可优化至O(n)。示例输入矩阵的最大正方形面积为4(2×2区域)。动态规划方法相比暴力枚举更高效,适合处理大规模矩阵。原创 2025-07-31 10:54:48 · 501 阅读 · 0 评论 -
算法题 存在重复元素 II
摘要:题目要求在数组中找到两个相同元素且下标距离不超过k。两种解法:1)哈希表法记录元素最近出现位置,遍历时检查距离;2)滑动窗口法维护k+1大小的窗口,用HashSet检测重复。两种方法时间复杂度均为O(n),哈希表空间O(min(n,m)),滑动窗口空间O(min(k,n))。示例测试验证了算法的正确性,如nums=[1,2,3,1],k=3时返回true。哈希表法逻辑更清晰,滑动窗口在k较小时更省空间。原创 2025-07-31 10:07:55 · 619 阅读 · 0 评论 -
算法题 存在重复元素
摘要:本文介绍了判断数组中是否存在重复元素的两种方法。方法一使用哈希集合(HashSet),通过元素的唯一性特性在O(n)时间内检测重复;方法二先排序数组,再比较相邻元素,时间复杂度为O(n log n)。推荐使用HashSet方法,因其效率更高且不修改原数组。文章包含详细代码实现、复杂度分析和测试用例,并解答了常见问题,如方法选择依据和边界情况处理。原创 2025-07-30 11:25:16 · 670 阅读 · 0 评论 -
动态规划 最长重复子数组
本文介绍了求解两个数组最长公共子数组长度的两种方法:动态规划和滑动窗口。动态规划方法通过定义dp[i][j]表示以nums1[i-1]和nums2[j-1]结尾的最长子数组长度,使用状态转移方程和滚动数组优化空间至O(min(m,n))。滑动窗口方法通过枚举两种对齐方式计算连续匹配长度,空间复杂度为O(1)。两种方法的时间复杂度分别为O(m×n)和O((m+n)×min(m,n))。文章还给出了Java实现代码、算法分析、示例过程和测试用例,并总结了动态规划倒序遍历和滑动窗口两种对齐方式等关键点。原创 2025-07-30 10:56:22 · 781 阅读 · 0 评论 -
算法题 长度最小的子数组
本文介绍了解决"长度最小的子数组"问题的滑动窗口算法。给定一个正整数数组和一个目标值,需要找到和大于等于目标值的最短连续子数组的长度。算法通过维护一个可变窗口(双指针)来高效求解:右指针扩展窗口直到满足条件,左指针收缩窗口以寻找最小长度。时间复杂度为O(n),空间复杂度O(1)。文章详细说明了算法步骤、代码实现、测试用例和关键点,特别强调了正整数数组对滑动窗口有效性的重要性。对于包含负数的情况,建议改用前缀和+二分查找的方法。原创 2025-07-29 16:07:30 · 416 阅读 · 0 评论 -
算法题 计数质数
本文介绍了统计小于n的质数数量的埃拉托斯特尼筛法。该方法通过创建布尔数组标记非质数,从2开始遍历到√n,将每个质数的倍数标记为合数。优化措施包括从i²开始标记、仅遍历到√n等。算法时间复杂度为O(nloglogn),空间复杂度O(n)。文章详细说明了算法步骤、代码实现(Java)、时间/空间复杂度分析,并通过n=20的示例演示了标记过程。最后提供了测试用例和关键点说明,解释了为什么只需遍历到√n以及处理大数时的性能表现。原创 2025-07-29 15:34:40 · 890 阅读 · 0 评论 -
算法题 轮转数组
本文介绍了LeetCode 189题"轮转数组"的三种解法:1)使用额外数组(O(n)空间),将元素按新位置存入再复制回原数组;2)环状替换(O(1)空间),通过计算最大公约数确定循环次数,逐个元素移动;3)三次翻转法(O(1)空间),先整体翻转,再分别翻转前k个和剩余元素。推荐三次翻转法作为最优解,时间复杂度均为O(n)。关键点包括取模处理k值、环状替换的循环控制以及翻转顺序,并提供了多种测试用例验证算法正确性。原创 2025-07-29 15:18:23 · 369 阅读 · 0 评论 -
算法题 最大数
摘要:LeetCode 179题要求将一组非负整数重新排列组成最大数。解法采用自定义排序策略,通过比较不同拼接顺序的字符串字典序((b+a).compareTo(a+b))进行降序排列。关键步骤包括:整数转字符串、自定义排序、处理前导零情况(如全零数组返回"0")。该算法时间复杂度为O(n log n),空间复杂度O(n)。测试案例验证了不同边界情况,包括相同前缀数字、全零数组和大数组合。核心在于正确设计比较规则,通过字符串操作避免数值溢出风险。原创 2025-07-28 11:05:35 · 495 阅读 · 0 评论 -
算法题 多数元素 II
本文介绍了LeetCode 229题"多数元素II"的解法。该问题要求在O(n)时间、O(1)空间内找出数组中所有出现次数大于⌊n/3⌋的元素。采用摩尔投票法的扩展版本,维护两个候选元素和计数器,通过抵消操作筛选候选,最后验证候选元素的真实出现次数。算法过程包括两个线性遍历:第一次确定候选,第二次验证候选。提供了Java实现代码、算法分析、测试用例和关键点说明,特别强调验证阶段的必要性和抵消操作的正确性。该解法能高效处理标准情况、全相同元素等边界条件。原创 2025-07-28 10:41:51 · 370 阅读 · 0 评论 -
算法题 多数元素
本文介绍了LeetCode 169题"多数元素"的两种解法。问题要求在数组中找到出现次数超过一半的元素。最优解法是摩尔投票法,通过元素两两抵消最终确定多数元素,时间复杂度O(n),空间复杂度O(1)。另一种方法是先排序后取中间元素,时间复杂度O(n log n)。文章详细说明了两种方法的实现代码、算法原理和测试用例,并分析了关键点,包括摩尔投票法的正确性保证和常见问题解答,如处理不存在多数元素的情况和算法选择依据。原创 2025-07-26 10:43:46 · 537 阅读 · 0 评论 -
算法题 两数之和 IV - 输入二叉搜索树
摘要:LeetCode 653题要求在二叉搜索树(BST)中寻找两个不同节点,使它们的和等于给定目标值k。文章介绍了两种解法:1) 哈希表辅助遍历法(通用解法),通过遍历树并实时检查互补值;2) 中序遍历+双指针法(利用BST有序特性),先获得有序数组再用双指针查找。两种方法时间/空间复杂度均为O(n)。文章详细说明了算法过程、代码实现、测试用例和关键点,包括对重复值的处理方法和两种方法的适用范围比较。测试验证了不同场景下的正确性,如单节点树、两节点树等特殊情况。原创 2025-07-26 10:23:02 · 308 阅读 · 0 评论 -
算法题 寻找旋转排序数组中的最小值 II
这篇文章介绍了LeetCode 154题"寻找旋转排序数组中的最小值 II"的解法。该问题要求在包含重复元素的旋转排序数组中找到最小元素。 文章提出了一种基于二分查找的优化算法,重点处理重复元素情况。算法核心思想是:比较中间元素与右边界元素,根据大小关系调整搜索范围。当元素相等时,通过右边界减一的方式安全缩小范围。 文章详细展示了Java代码实现,并分析了算法的时间复杂度(平均O(log n),最坏O(n))和空间复杂度(O(1))。通过具体示例演示了算法执行过程,并提供了多个测试用例验原创 2025-07-25 16:47:27 · 228 阅读 · 0 评论 -
算法题 寻找旋转排序数组中的最小值
本文介绍了在旋转排序数组中寻找最小值的二分查找解法。旋转数组可分为两个有序部分,最小值是右段的第一个元素。算法通过比较中间元素与右边界调整搜索范围:若中间值大于右边界,最小值在右半段;否则在左半段。时间复杂度为O(log n),空间复杂度O(1)。关键点包括正确选择比较对象、边界更新逻辑和循环终止条件。测试用例验证了算法的正确性,常见问题解答了实现细节和边界情况。该算法高效解决了旋转数组的最小值查找问题。原创 2025-07-25 16:23:00 · 220 阅读 · 0 评论 -
算法题 分发糖果
摘要:LeetCode 135题要求根据孩子的评分分配糖果,满足每个孩子至少1颗糖且评分更高的相邻孩子获得更多糖。解决方法采用两次遍历:从左到右确保左规则(比左边高分孩子多1颗),从右到左确保右规则(比右边高分孩子多1颗),取两次结果的最大值。时间复杂度O(n),空间复杂度O(n)。示例展示了递增、递减、平坡等不同情况下的糖果分配策略,核心在于双向处理相邻关系,确保同时满足左右规则,最终统计最少糖果总数。原创 2025-07-24 11:15:11 · 306 阅读 · 0 评论 -
算法题 岛屿的最大面积
文章摘要 LeetCode 695题要求计算二进制矩阵中最大岛屿的面积。岛屿由相邻的陆地(1)组成,相邻指水平或垂直方向。算法采用DFS或BFS遍历矩阵,发现陆地时启动搜索,标记已访问的单元格并统计面积。DFS通过递归实现,BFS使用队列。两种方法时间复杂度均为O(m×n),空间复杂度分别为O(m×n)和O(min(m,n))。关键点包括原地标记、方向处理和边界检查。测试用例验证了算法的正确性,针对不同岛屿形态(集中、分散、长条形)都能准确计算最大面积。原创 2025-07-24 10:40:42 · 461 阅读 · 0 评论 -
算法题 被围绕的区域
LeetCode 130 被围绕的区域 - 摘要 该问题要求找到并替换矩阵中被X完全围绕的O区域,保留与边界相连的O。关键解法: 算法思路:逆向思维,先标记所有与边界相连的O(不会被替换的部分),再替换剩下的O。使用DFS或BFS进行标记。 实现方法: DFS:递归遍历边界O及其相邻O,标记为特殊字符 BFS:使用队列迭代处理边界O及其相邻O 复杂度分析: 时间复杂度O(mn),空间复杂度O(mn)(最坏情况) 核心步骤: (1) 标记边界相连O (2) 替换剩余O为X (3) 恢复标记区域为O 两种方法均原创 2025-07-24 09:58:14 · 839 阅读 · 0 评论 -
动态规划 三角形最小路径和
本文介绍了求解三角形最小路径和的两种动态规划方法。方法一使用二维DP数组自顶向下计算,初始化起点后逐行处理首尾元素和中间元素,最后比较最后一行得到结果。方法二优化空间复杂度为一维数组,自底向上遍历,通过比较相邻元素更新当前路径和。两种方法时间复杂度均为O(n²),但方法二空间复杂度优化为O(n)。文章详细分析了状态转移、边界处理、遍历顺序等关键点,并提供了代码实现和测试用例验证。原创 2025-07-23 11:39:12 · 773 阅读 · 0 评论 -
算法题 有序链表转换二叉搜索树
LeetCode 109题要求将有序链表转换为高度平衡的二叉搜索树。采用分治递归法结合快慢指针找中点,时间复杂度O(n log n),空间复杂度O(log n)。核心步骤包括:使用快慢指针找到链表中点作为根节点,递归构建左右子树,并处理边界情况。也可优化为先将链表转为数组再构建BST,使时间复杂度降为O(n)。测试用例验证了算法在空链表、单节点和双节点情况下的正确性。原创 2025-07-23 10:21:25 · 415 阅读 · 0 评论 -
算法题 将有序数组转换为二叉搜索树
本文介绍了LeetCode 108题"将有序数组转换为二叉搜索树"的解决方案。该问题要求将升序数组转换为高度平衡的BST,其中每个节点的左右子树高度差不超过1。核心算法采用分治递归法,每次选择数组中间元素作为根节点,递归构建左右子树。时间复杂度为O(n),空间复杂度为O(log n)。文章详述了算法实现、关键点、构建过程,并提供了边界处理、优化建议和测试用例。重点强调了中间节点选择方法和递归终止条件,确保生成的BST始终保持高度平衡特性。原创 2025-07-23 09:50:13 · 265 阅读 · 0 评论 -
算法题 矩阵置零
本文介绍了LeetCode 73题"矩阵置零"的解法。该问题要求将矩阵中为0的元素所在行和列全部置为0,且需使用原地算法。核心思路是利用首行和首列作为标记位,先记录首行首列原始状态,再遍历内部元素标记需要置零的行列,最后统一处理。算法时间复杂度O(m×n),空间复杂度O(1)。文章详细说明了标记法步骤、代码实现、边界情况处理和优化方案,并提供了测试用例验证正确性。关键点在于复用矩阵首行首列进行标记,避免使用额外空间。原创 2025-07-22 11:20:58 · 309 阅读 · 0 评论 -
算法题 加一
题目要求对用数组表示的非负整数加一。从末位开始加一,处理进位情况:若当前位加一后小于10则直接返回;若等于10则置为0并进位到前一位。若最高位仍有进位,需创建新数组并在首位补1。时间复杂度最坏O(n),空间复杂度一般为O(1),最高位进位时为O(n)。关键点包括逆序处理进位、提前终止循环和最高位进位处理。原创 2025-07-22 10:46:34 · 402 阅读 · 0 评论 -
算法题 螺旋矩阵
摘要 LeetCode 54题要求以顺时针螺旋顺序遍历并返回矩阵中的所有元素。本文提出边界收缩法解决方案:通过维护四个边界变量(top,bottom,left,right),依次遍历矩阵的外层到内层。算法按顺时针方向处理四边:先从左到右遍历上边,从上到下遍历右边,从右到左遍历下边,再从下到上遍历左边,每处理完一边就收缩对应边界。关键点包括边界更新顺序、边界条件检查以及终止条件判断。该算法时间复杂度O(m×n),空间复杂度O(1),能正确处理各种边界情况如单行、单列矩阵。原创 2025-07-22 10:17:57 · 271 阅读 · 0 评论 -
算法题 N 皇后 II
本文介绍了LeetCode 52题N皇后II的高效解法,采用回溯法结合位运算优化。关键点在于使用三个整数位掩码分别跟踪列、主对角线和副对角线的占用状态,通过位运算快速检测冲突。算法时间复杂度为O(n!),空间复杂度O(n)。文章详细解释了位掩码设计原理、冲突检测方法和状态更新机制,并指出无需显式回溯的特点。同时提供了Java代码实现、复杂度分析和测试用例,最后解答了关于位掩码溢出的常见问题。该解法通过状态压缩显著提升了传统回溯法的效率。原创 2025-07-22 09:53:49 · 641 阅读 · 0 评论 -
算法题 N 皇后
摘要 LeetCode 51题N皇后问题要求在一个n×n棋盘上放置n个互不攻击的皇后。本文介绍了基于回溯法的解决方案,使用三个状态数组记录列、主对角线和副对角线的占用情况。算法通过逐行放置皇后,检查冲突并递归处理下一行,成功放置所有皇后后保存解。关键点包括对角线索引计算和状态重置,时间复杂度为O(n!),空间复杂度为O(n)。文章还讨论了位运算优化和常见问题解答,提供了Java实现代码和测试用例。原创 2025-07-21 11:39:11 · 1179 阅读 · 0 评论 -
算法题 缺失的第一个正数
本文介绍了LeetCode 41题"缺失的第一个正数"的解法。该问题要求在未排序的整数数组中找到缺失的最小正整数,时间复杂度O(n),空间复杂度O(1)。采用原地哈希法,通过两次遍历:第一次将每个正整数交换到正确位置(值x放在索引x-1处),第二次检查第一个位置不匹配的元素。关键点包括位置映射关系、交换条件的控制以及边界处理。算法时间复杂度O(n),空间复杂度O(1),适用于各种边界情况,如含负数、重复值或大数的数组。原创 2025-07-21 10:56:21 · 284 阅读 · 0 评论 -
算法题 解数独
本文介绍了LeetCode 37题解数独的算法实现。该问题要求按照数独规则填充空格,确保每行、每列和每个3×3宫内数字1-9不重复。算法采用回溯法结合状态压缩技术,使用三个二维数组分别记录行、列和九宫格的数字使用状态。通过递归尝试填充数字并在冲突时回溯,最终找到唯一解。时间复杂度最坏为O(9^m),空间复杂度为O(1)。关键点包括状态压缩、九宫格索引计算和回溯机制。文章提供了完整的Java实现、算法分析和测试用例。原创 2025-07-21 10:11:48 · 347 阅读 · 0 评论 -
算法题 有效的数独
本文介绍了LeetCode第36题"有效的数独"的解法。该问题要求验证一个9x9数独是否满足基本规则:每行、每列和每个3x3宫格内数字1-9不重复。采用哈希表/数组标记法,通过创建三个二维数组分别记录行、列和宫格中数字的出现情况。算法遍历数独,检查每个数字是否重复出现,时间复杂度为O(1),空间复杂度为O(1)。文章提供了Java实现代码,并分析了示例输入的处理过程,最后给出了多个测试用例验证算法正确性。原创 2025-07-20 11:22:41 · 715 阅读 · 0 评论 -
算法题 搜索插入位置
本文介绍了LeetCode 35题"搜索插入位置"的二分查找解法。给定一个排序数组和目标值,算法在O(logn)时间内找到目标值索引或应插入位置。关键点包括:初始化左右指针,循环比较中点值调整搜索范围,最终返回left作为插入位置。文章详细分析了算法过程、时空复杂度,并通过示例演示了具体执行步骤。同时提供了完整的Java代码实现和测试用例,涵盖了目标值存在/不存在、边界情况等场景。最后总结了常见问题解答,如循环条件、防溢出处理等注意事项。原创 2025-07-20 10:55:15 · 434 阅读 · 0 评论 -
算法题 最接近的三数之和
摘要 LeetCode 16题要求在整数数组中找到三个数,使其和最接近目标值。采用排序+双指针策略:先排序数组,固定第一个数后,用双指针搜索剩余两数。通过比较当前和与目标值的差值来更新最接近的和。时间复杂度O(n²),空间复杂度O(1)。关键点包括排序预处理、双指针移动逻辑(和小则右移左指针,和大则左移右指针)以及跳过重复元素优化。算法通过维护最接近的和变量,最终返回最优解。测试用例验证了各种边界情况,确保算法正确性。原创 2025-07-19 10:35:41 · 406 阅读 · 0 评论 -
算法题 最长公共前缀
本文介绍了LeetCode第14题"最长公共前缀"的解决方案。采用垂直扫描法,以第一个字符串为基准,逐列比较其他字符串的对应字符,时间复杂度O(S),空间复杂度O(1)。算法包含边界处理、提前终止机制,并通过测试用例验证了正确性。关键点在于基准选择和高效的终止条件,确保在发现不匹配时立即返回结果。文章还讨论了常见问题和优化思路,提供了二分查找的替代实现方案。原创 2025-07-19 10:10:40 · 304 阅读 · 0 评论 -
动态规划 跳跃游戏 II
摘要: LeetCode 45题要求从数组起点出发,根据每个位置的可跳跃步数,计算到达终点的最小跳跃次数。两种解法: 动态规划(反向):定义dp[i]为从位置i到终点的最小跳跃次数,倒序计算,时间复杂度O(n²),空间O(n)。 贪心算法(正向):维护当前边界end和最大可达位置maxPos,遍历时更新边界并跳跃,时间O(n),空间O(1)。贪心法通过每一步最大化覆盖范围确保最优解,效率更高。 关键点:贪心的边界更新机制(i==end时跳跃)和动态规划的状态反向依赖关系。测试用例验证了算法的正确性。原创 2025-07-19 09:32:12 · 918 阅读 · 0 评论 -
动态规划 跳跃游戏
本文介绍了判断能否从数组起点跳到终点的两种解法:贪心算法和动态规划。贪心算法通过维护最大可达位置(时间复杂度O(n),空间O(1)),动态规划使用DP数组记录可达性(时间复杂度O(n²),空间O(n))。关键点包括贪心算法的提前终止条件、单元素数组和起点为0的特殊处理。测试用例验证了算法的正确性,常见问题解答了边界情况的处理逻辑。贪心算法因其高效性被推荐为首选方案。原创 2025-07-18 14:58:59 · 312 阅读 · 0 评论