- 博客(57)
- 问答 (1)
- 收藏
- 关注
原创 力扣503 下一个更大元素 II java实现
本文介绍了如何解决循环数组中寻找每个元素的下一个更大元素的问题。通过使用单调栈算法,对数组进行两次遍历:第一次处理常规顺序,第二次处理循环部分。示例展示了输入[1,2,1]输出[2,-1,2]的情况。Java实现中初始化结果数组为-1,使用双端队列模拟栈结构,第一次遍历处理正常顺序元素,第二次遍历确保循环查找。该方法有效解决了循环数组带来的边界问题,时间复杂度为O(n)。代码示例虽然简单但清晰地展示了算法思路。
2026-02-10 14:00:31
49
原创 力扣496 下一个更大元素I java实现
题目要求找出数组nums1中每个元素在nums2中对应位置右侧的第一个更大元素。解题思路是:1)使用单调栈处理nums2,栈中保持递减顺序;2)当遇到比栈顶大的元素时,将栈顶元素出栈并记录其下一个更大元素;3)用哈希表存储每个元素的下一个更大元素;4)最后遍历nums1从哈希表中获取结果。该方法时间复杂度O(n),空间复杂度O(n),适用于处理不重复元素的数组。示例中nums1=[4,1,2]对应结果为[-1,3,-1]。
2026-02-09 13:52:39
229
原创 力扣739 每日温度 java实现
摘要: 题目要求根据每日温度数组,找出每一天之后需要等待多少天才能遇到更高温度。使用单调栈存储下标,保持栈内温度递减。遍历时,若当前温度高于栈顶温度,则计算间隔天数并出栈,最后将当前下标入栈。时间复杂度O(n),空间复杂度O(n)。示例:输入[73,74,75,71,69,72,76,73],输出[1,1,4,2,1,1,0,0]。核心代码通过栈比较温度并更新结果数组。
2026-02-09 13:45:52
47
原创 力扣647 回文子串 java实现
该题定义动态规划数组含义不能直接定义结果,换成该位置是否是回文子串更好解决该问题,布尔类型的dp[i][j]:表示区间范围[i,j] 的子串是否是回文子串,如果是dp[i][j]为true,否则为false。6个回文子串: "a", "a", "a", "aa", "aa", "aaa"三个回文子串: "a", "b", "c"是字符串中的由连续字符组成的一个序列。是正着读和倒过来读一样的字符串。,请你统计并返回这个字符串中。以上为记录分享用,代码较差请见谅。
2026-02-05 13:58:00
75
原创 力扣1035 不相交的线 java实现
题目要求在两组数字序列中找出最多的不相交连线,其中连线两端数字必须相等且连线不能相交。这实际上等价于求两个序列的最长公共子序列(LCS)问题。采用动态规划方法,定义dp[i][j]表示nums1前i项和nums2前j项的LCS长度。当nums1[i-1]==nums2[j-1]时,dp[i][j]=dp[i-1][j-1]+1;否则取上方或左方的最大值。最终dp[m][n]即为结果。时间复杂度O(mn),空间复杂度O(mn)。
2026-02-02 13:39:52
175
原创 力扣718 最长重复子数组 java实现
摘要:本文介绍了求解两个数组最长公共子数组的动态规划解法。定义dp[i][j]表示以nums1[i-1]和nums2[j-1]结尾的最长公共子数组长度。通过双重循环遍历数组,当nums1[i-1]=nums2[j-1]时,状态转移方程为dp[i][j]=dp[i-1][j-1]+1。最终返回dp数组中的最大值即可。该方法时间复杂度O(nm),空间复杂度O(nm),示例代码展示了如何实现该算法。
2026-01-30 14:07:25
40
原创 力扣123 买卖股票的最佳时机III java实现
随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4。在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3。你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。设计一个算法来计算你所能获取的最大利润。
2026-01-26 14:26:05
293
原创 力扣122 买卖股票的最佳时机II java实现
摘要:本文探讨了股票买卖问题II的解法,允许多次买卖股票但每次只能持有一股。通过动态规划方法,使用二维数组dp记录每天持有/不持有股票的最大利润。dp[i][0]表示第i天不持股的最大利润,dp[i][1]表示持股的最小成本。算法遍历价格数组,通过比较相邻日期的价格差来更新状态,最终返回最后一天不持股时的最大利润。示例分析展示了算法如何计算最佳买卖时机,如输入[7,1,5,3,6,4]时输出7。该方法时间复杂度O(n),空间复杂度O(n)。
2026-01-23 13:33:42
167
原创 力扣337 打家劫舍 III java实现
摘要:该问题描述了一个二叉树结构的房屋排列,要求在不触发相邻房屋警报的情况下计算小偷能盗取的最大金额。采用递归解法,对每个节点返回包含两个值的数组:res[0]表示不选当前节点时的最大值(取左右子节点的较大值之和),res[1]表示选当前节点时的值(当前节点值加上不选左右子节点的值)。最终结果为根节点两种情况的较大值。该方法通过后序遍历实现,时间复杂度为O(n)。
2026-01-22 13:40:59
327
原创 力扣213 打家劫舍II java实现
题目描述了一个环形房屋的打家劫舍问题,要求在不触发警报(不能同时偷相邻房屋)的情况下获得最大金额。关键解法是将环形问题拆解为两个线性问题:分别计算去掉首尾房屋后的最大金额,然后取两者较大值。具体实现使用动态规划,通过两个数组分别记录从第一间到倒数第二间,以及从第二间到最后一间的最大金额。时间复杂度为O(n),空间复杂度为O(n)。示例验证了算法的正确性,如输入[2,3,2]输出3,[1,2,3,1]输出4。该解法有效避免了首尾房屋同时被选的问题。
2026-01-21 13:36:25
135
原创 力扣139 单词拆分 java实现
摘要:题目要求判断字符串s是否能由字典wordDict中的单词组合而成,单词可重复使用。采用动态规划解法,定义dp数组记录各位置是否可由字典单词组成。遍历字符串时,检查当前子串是否匹配字典单词,并验证剩余部分是否已被标记为可组成。示例测试显示,对于输入s="leetcode"和字典["leet","code"],返回true。该解法时间复杂度较高,但能正确解决问题。
2026-01-16 14:53:18
503
原创 力扣377 组合总和 Ⅳ java实现
摘要: 题目要求计算给定不同整数数组nums中,和为target的排列个数(顺序不同的序列视为不同组合)。通过动态规划求解,将问题类比为爬楼梯(每次可选nums中的步数)。初始化dp[0]=1,递推公式为dp[i] += dp[i-n](当i>=n时)。示例nums=[1,2,3],target=4输出7。代码使用一维数组dp,最终返回dp[target]。时间复杂度O(target*n),空间复杂度O(target)。
2026-01-15 14:00:19
259
原创 力扣518 零钱兑换II java实现
摘要:本文介绍了解决"零钱兑换II"问题的动态规划方法。给定不同面额的硬币和总金额,计算凑成金额的组合数。使用二维数组dp[i][j]表示前i种硬币凑成金额j的方法数,状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-coins[i]]。初始化时处理第一种硬币的情况,然后依次处理其他硬币。最终返回dp[coins.length-1][amount]作为结果。示例展示了算法在amount=5和coins=[1,2,5]时输出4种组合方式。
2026-01-14 14:47:49
357
原创 力扣474 一和零 java实现
摘要:该问题要求在给定二进制字符串数组strs和限制条件m个0、n个1的情况下,找出满足条件的最大子集长度。这是一个二维背包问题,使用三维动态规划数组dp[i][j][k]来记录处理前i个字符串时,使用j个0和k个1能获得的最大子集大小。解法通过统计每个字符串的0和1数量,逐步更新dp数组,最终返回dp[strs.length-1][m][n]作为结果。示例展示了如何选择符合条件的子集,而代码实现了这一动态规划解法。
2026-01-13 15:04:58
185
原创 力扣494 目标和 java实现
摘要:本文讨论了在非负整数数组中通过添加'+'或'-'构造表达式使其和等于目标值的问题。提供了两种解决方案:1)回溯法:递归遍历所有可能的符号组合,统计满足条件的表达式数目;2)动态规划法:将问题转化为背包问题,使用二维数组dp[i][j]记录前i个元素组成j的方法数。回溯法简单直观但效率较低,动态规划法通过状态转移方程优化了时间复杂度。文章包含Java实现代码和示例说明,适合算法学习者参考。
2026-01-12 15:29:42
506
原创 力扣1049 最后一块石头的重量II java实现
摘要: 该问题要求将一堆石头粉碎后得到最小可能剩余重量。通过将问题转化为背包问题,目标是找到最接近总重量一半的子集。使用动态规划,计算每个石头放入背包的可能组合,最终返回总重量减去两倍最大子集重量的绝对值。例如,输入[2,7,4,1,8,1]时,最优解剩余1。算法时间复杂度为O(n*sum),其中n是石头数量,sum是总重量。
2026-01-09 16:36:00
497
原创 力扣416 分割等和子串 java实现
摘要: 题目要求判断一个正整数数组能否被分割成两个和相等的子集。解决思路是转化为01背包问题,计算数组总和后,若为奇数直接返回false;若为偶数,则目标为总和的一半。使用动态规划二维数组dp[i][j],表示前i个元素是否能凑出和j。初始化后,通过状态转移(不选或选当前元素)填充数组,最终检查dp[n-1][target]是否为true。示例代码展示了该算法的实现过程,时间复杂度为O(n×target)。
2026-01-08 14:57:06
501
原创 力扣96 不同的二叉搜索树 java实现
摘要:本文探讨了计算由n个不同节点组成的二叉搜索树数量的动态规划解法。通过分析不同根节点情况下的子树组合规律,得出递推公式:G(n) = Σ(G(i-1)*G(n-i)),其中i为根节点位置。使用数组存储中间结果,从G(0)=1和G(1)=1开始逐步计算到G(n)。例如n=3时有5种不同结构。该方法时间复杂度O(n²),空间复杂度O(n),适用于1≤n≤19的情况。
2026-01-07 14:30:43
519
原创 力扣343 整数拆分 java实现
摘要:本文探讨如何将正整数n拆分为至少两个正整数之和,使其乘积最大化。通过动态规划方法,建立状态转移方程res[i] = max(res[i], max((i-j)*j, res[i-j]*j)),其中j从1到i-1遍历。示例显示n=10时最优解为3×3×4=36。算法时间复杂度O(n²),空间复杂度O(n),适用于2≤n≤58的情况。
2026-01-06 16:04:43
962
原创 力扣746 使用最小花费爬楼梯 java实现
摘要:该算法解决最小花费爬楼梯问题,给定台阶费用数组cost,每次可选择跨1或2级台阶,求到达顶部的最小总花费。采用动态规划方法,使用三个变量one、two和res迭代计算,通过比较前一级或前两级台阶的花费来确定最优解。时间复杂度O(n),空间复杂度O(1)。示例显示从起点灵活选择,通过最优路径组合实现最小花费。核心公式为res=min(one+cost[i-1], two+cost[i-2]),适用于台阶数≥2的情况。
2026-01-05 14:18:36
159
原创 力扣56 合并区间 java实现
本文介绍了合并重叠区间的方法。首先将区间按左边界排序,然后遍历比较相邻区间:若当前区间左边界小于等于前一区间的右边界,则合并为新区间,取两者的最大右边界;否则保留原区间。示例展示了[[1,3],[2,6]]合并为[1,6]等情况。实现步骤包括排序、遍历合并和结果收集,最终返回不重叠的区间数组。该方法时间复杂度主要由排序决定,适用于区间合并问题。
2026-01-04 14:00:19
625
原创 力扣406 根据身高重建队列 java实现
本文探讨了根据身高重建队列的问题。给定一个由[hi,ki]组成的数组,表示每个人的身高hi及其前面身高≥hi的人数ki,要求重建正确的队列顺序。解决方法是先按身高降序排序(身高相同时按ki升序),然后依次将每个人插入到队列中ki指定的位置。这样能确保高个子先排好位置,后续插入的矮个子不会影响已排好高个子的ki值。示例展示了算法的具体执行过程,最终返回重建后的队列。该方法时间复杂度主要取决于排序步骤,为O(nlogn)。
2025-12-31 14:15:50
738
原创 力扣134 加油站 java实现
摘要:本文讨论环形加油站问题,给定汽油数组gas和消耗数组cost,要求找到唯一能绕行一周的起始加油站。解题思路是计算每个站的净油量,若总油量为负则无解。通过遍历累加净油量,当累计值为负时重置起点,最终返回可行起点或-1。示例验证了算法正确性,时间复杂度为O(n)。核心代码展示了如何实现这一逻辑。
2025-12-29 14:16:52
276
原创 力扣1005 K次取反后最大化的数组和 java实现
摘要:本文介绍了一个算法问题,要求在给定整数数组nums和整数k的情况下,通过恰好k次取反操作(每次可以选择任意元素取反)使数组和最大化。解题思路是:先排序数组,优先取反最小的负数;若剩余k为奇数,则再次排序并对最小元素取反。示例代码展示了Java实现,时间复杂度主要来自排序操作。该方法确保在有限次操作后获得最大数组和。
2025-12-26 14:27:03
531
原创 力扣376 摆动序列 java实现
摘要:摆动序列要求相邻数字差值正负交替出现。给定整数数组nums,求其最长摆动子序列的长度。算法通过遍历数组,统计差值符号交替变化的次数:当当前差值与前一个有效差值符号相反时,计数加1。例如,[1,7,4,9,2,5]的差值为(6,-3,5,-7,3),故长度为6。该方法时间复杂度为O(n),只需维护两个布尔变量跟踪下一个期望的差值符号即可。关键点在于忽略连续同号差值,仅统计符号变化的次数。
2025-12-25 13:36:34
619
原创 力扣455 分发饼干 java实现
假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。虽然你有两块小饼干,由于他们的尺寸都是 1,你只能让胃口值是 1 的孩子满足。,这个孩子会得到满足。你的目标是满足尽可能多的孩子,并输出这个最大数值。你有三个孩子和两块小饼干,3 个孩子的胃口值分别是:1,2,3。你有两个孩子和三块小饼干,2 个孩子的胃口值分别是 1,2。,这是能让孩子们满足胃口的饼干的最小尺寸;你拥有的饼干数量和尺寸都足以让所有孩子满足。,我们可以将这个饼干。所以你应该输出 1。所以你应该输出 2。
2025-12-23 15:27:42
1150
原创 力扣46 全排列 java实现
本文介绍了一个生成数组全排列的回溯算法解决方案。给定不含重复数字的数组,算法通过递归回溯生成所有可能的排列组合。核心思路是使用布尔数组标记已使用的元素,在递归过程中构建临时排列列表,当列表长度等于原数组长度时保存结果。代码实现了回溯过程,包括递归调用、元素添加与移除以及状态标记的更新。时间复杂度为O(n!),空间复杂度为O(n)。该方法适用于长度1-6的输入数组,能正确处理各种边界情况。
2025-12-22 14:20:59
166
原创 力扣216 组合总和III java实现
题目要求从数字1到9中找出所有k个数的组合,使其和等于n,且每个数字只能使用一次。通过回溯算法遍历所有可能的组合,当组合大小等于k且和为n时将其加入结果。示例中,当k=3、n=7时,唯一解是[1,2,4];k=3、n=9时有三个解;k=4、n=1时无解。算法通过递归和剪枝优化,避免无效搜索。时间复杂度为O(C(9,k)),空间复杂度为O(k)。
2025-12-18 14:01:04
370
原创 力扣669 修剪二叉搜索树 java实现
题目要求修剪二叉搜索树,保留节点值在[low, high]范围内的节点,并保持原有结构。采用递归方法:若节点值小于low,则修剪右子树;若大于high,则修剪左子树;若在范围内,则递归修剪左右子树。时间复杂度为O(n),空间复杂度为O(h),其中n为节点数,h为树高。
2025-12-17 14:43:02
943
原创 力扣701 二叉搜索树中的插入操作 java实现
本文介绍了在二叉搜索树(BST)中插入新节点的算法。题目要求在保持BST性质的前提下,将给定值插入树中并返回根节点。算法采用递归方法:若当前节点为空则创建新节点;否则根据值大小比较决定向左或向右子树递归。由于不要求平衡,只需遵循BST规则即可。文中提供了Java实现代码,包含测试用例和详细注释,时间复杂度为O(h),其中h为树的高度。该解法简洁高效,适用于各种BST插入场景。
2025-12-16 13:54:42
1039
原创 力扣98 验证二叉搜索树 java实现
摘要:本文介绍了验证二叉搜索树(BST)的算法。BST要求左子树节点值严格小于当前节点,右子树节点值严格大于当前节点。通过中序遍历(左-中-右)的特性,可以验证遍历结果是否严格递增。文中提供了Java实现代码,使用递归方法进行中序遍历,并维护一个全局变量记录前驱节点值进行比较。测试用例验证了算法正确性,如输入[2,1,3]返回true,而[5,1,4,null,null,3,6]返回false,因为右子节点4小于根节点5。
2025-12-15 14:27:32
203
原创 力扣654 最大二叉树 java实现
本文介绍了如何构建最大二叉树的算法。该算法通过递归方式实现:首先在数组中找到最大值作为根节点,然后对最大值左侧和右侧的子数组分别递归构建左右子树。文章提供了Java实现代码示例,演示了对输入数组[3,2,1,6,0,5]的处理过程,最终输出对应的二叉树结构。该解法采用分治思想,时间复杂度主要取决于查找最大值和数组分割操作。
2025-12-12 14:02:01
436
原创 力扣106 从中序与后序遍历序列构造二叉树 java实现
摘要:本文介绍了如何根据二叉树的中序和后序遍历序列重建二叉树。后序遍历的最后一个元素是根节点,通过在中序遍历中找到该节点位置,可确定左右子树的范围。采用递归方法,分别处理左右子树的中序和后序序列,逐步构建完整二叉树。文中提供了Java实现代码示例,包括处理边界条件和分割数组的逻辑。该算法时间复杂度为O(n),适用于节点值不重复的二叉树重建场景。
2025-12-11 15:11:07
1122
原创 力扣513 找树左下角的值 java实现
摘要 本文介绍了一个二叉树问题:找出二叉树最底层最左边节点的值。通过深度优先搜索(DFS)遍历二叉树,记录当前最大深度和对应的节点值。算法实现使用递归方式,优先遍历左子树,当遇到叶子节点时更新最大深度和结果值。代码示例展示了Java实现,时间复杂度为O(n),空间复杂度为O(h),其中h为树的高度。该解法适用于任意非空二叉树,能够正确处理各种树形结构的情况。
2025-12-10 14:25:37
323
原创 力扣404 左叶子之和
本文介绍了计算二叉树所有左叶子节点之和的算法。关键点在于需要通过父节点判断其左孩子是否为左叶子节点(即该节点是父节点的左子节点,且自身没有左右子节点)。算法采用深度优先搜索遍历二叉树,当遇到满足条件的左叶子节点时累加其值。时间复杂度为O(n),空间复杂度为O(h)(h为树高)。示例代码展示了如何实现该算法,包括判断条件和递归遍历过程。该解法适用于节点数在1到1000范围内的二叉树。
2025-12-09 15:32:53
890
原创 力扣226 翻转二叉树 java实现
摘要:翻转二叉树问题要求交换每个节点的左右子树。可以通过递归遍历实现,采用前序或后序遍历方式(中序不适用),在访问节点时交换其左右子节点。示例代码展示了后序遍历的实现:先递归处理左右子树,再交换当前节点的左右指针。算法时间复杂度为O(n),空间复杂度为递归栈的O(h),其中h为树高。该解法适用于任意二叉树,包括空树和单节点树。
2025-12-08 13:56:17
566
原创 力扣347. 前k个高频元素 java实现
题目要求找出数组中前k个高频元素。使用哈希表统计元素频率后,通过优先队列(大顶堆)按频率排序,最后取出前k个元素。示例:[1,1,1,2,2,3],k=2时输出[1,2]。Java实现利用HashMap统计频率,PriorityQueue排序,时间复杂度优于O(nlogn)。该方法保证在较大数据量时仍能高效运行。
2025-12-03 15:47:27
504
原创 力扣1047 删除字符串中所有相邻重复项 java实现
摘要:本文介绍了一种删除字符串中相邻重复字符的算法。通过使用栈结构遍历字符串,遇到与栈顶相同的字符时弹出栈顶元素,否则压入栈中。最终将栈中剩余字符拼接成结果字符串。该方法能有效处理类似"abbaca"的输入(输出"ca"),时间复杂度为O(n),空间复杂度为O(n)。文末提供了Java实现示例,使用双端队列模拟栈操作完成重复项删除功能。
2025-12-02 14:06:19
381
原创 力扣59 螺旋矩阵II java实现
摘要:本文介绍如何生成一个n×n的螺旋矩阵,其中元素按顺时针方向从1到n²排列。通过设置上下左右边界进行模拟填充:先从左上到右上,再从上到下,接着从右到左,最后从下到上,每次填充后更新边界。核心思路是控制循环边界和当前数值,确保按层螺旋填充矩阵。示例展示了3×3矩阵生成结果为[[1,2,3],[8,9,4],[7,6,5]]的完整过程。
2025-11-12 15:25:41
719
空空如也
abaqus2020版打不开怎么解决?
2021-05-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅