自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 代码随想录-Day55

虽然这段代码能够正确解决接雨水问题,但是其时间复杂度较高,为 O(n^2),在处理大数据量时效率低下。为了提高效率,可以采用动态规划或双指针技术,将时间复杂度降低到 O(n)。例如,可以预先计算每个位置左边最大高度和右边最大高度,或者使用双指针从两边向中间逼近,这样可以避免对每个元素进行二次遍历,显著提升算法性能。在实际应用中,优化算法的时间复杂度是提高程序运行效率的关键,特别是在处理大规模数据时尤为重要。

2024-07-09 13:18:52 1032

原创 代码随想录-Day53

这段代码通过使用单调栈的策略,有效地解决了每日温度问题,能够快速找到每个温度元素右边第一个比它大的温度元素的位置。单调栈是一种常用的数据结构,在处理与单调性相关的数组或序列问题时非常有用,例如寻找最近的更大或更小的元素、股票价格波动分析等。在实际应用中,掌握单调栈的原理和使用方法能够帮助解决一系列经典问题,提高代码效率。通过使用单调栈的策略,版本2的代码同样有效地解决了每日温度问题。这种实现方式不仅保持了良好的时间复杂度和空间复杂度,而且在代码结构上更为精简和直观,有助于提高代码的可读性和维护性。

2024-07-08 21:39:40 817

原创 代码随想录-Day52

这段代码通过动态规划方法,有效地解决了回文子串计数问题。通过构建二维布尔数组dp来追踪子串是否为回文,避免了对每个子串进行单独的回文检查,从而提高了效率。在处理回文相关问题时,这种方法是一种常见的有效策略。如果需要进一步优化空间复杂度,可以考虑使用滚动数组技术,但由于回文子串的性质,这种优化可能不如其他问题那样明显或直接。在实际应用中,选择适当的优化策略取决于具体需求和资源限制。这段代码通过动态规划方法,有效地解决了回文子串计数问题。

2024-07-08 17:13:44 992 1

原创 代码随想录-Day51

这段代码通过动态规划的方法,有效地解决了不同子序列计数问题。尽管时间复杂度和空间复杂度较高,但在许多实际应用场景中,这样的性能通常是可接受的,特别是当字符串长度适中时。如果需要进一步优化空间复杂度,可以考虑使用滚动数组技术,将空间复杂度降低到 O(min(m, n)),但这通常会增加代码的复杂度。在处理此类问题时,权衡时间和空间资源是一个常见的考量因素。这段代码通过计算最长公共子序列并利用其长度来间接计算编辑距离,提供了一种有效的解决方案。

2024-07-08 17:00:23 1072

原创 代码随想录-Day50

这段代码通过动态规划的方法,有效地解决了两个字符串的最长公共子序列问题。尽管时间复杂度和空间复杂度较高,但在许多实际应用场景中,这样的性能通常是可接受的,特别是当字符串长度适中时。如果需要进一步优化空间复杂度,可以考虑使用滚动数组技术,将空间复杂度降低到 O(min(m, n))。这段代码通过滚动数组的动态规划方法,有效地解决了两个字符串的最长公共子序列问题,同时在空间复杂度方面进行了优化。滚动数组技术避免了使用额外的大量空间,使得算法在处理大规模数据时更加高效。通过引入辅助变量pre。

2024-07-08 13:50:15 1227

原创 代码随想录-Day49

这段代码通过动态规划的方法,有效地解决了最长递增子序列问题。尽管时间复杂度为 O(n^2),但在许多实际应用场景中,这样的性能通常是可接受的。如果需要更高效的算法(如 O(n log n) 的时间复杂度),则可以采用更复杂的算法,例如结合二分查找的优化版本。这段代码通过动态规划的方法,有效地解决了最长连续递增序列问题。相比于最长递增子序列问题,最长连续递增序列问题的时间复杂度更低,因为不需要对每个元素都进行前面所有元素的比较,只需关注相邻元素之间的关系。

2024-07-06 21:44:01 1233

原创 代码随想录-Day48

表示在第i天结束时,手中持有股票的最大利润。: 表示在第i天结束时,处于冷却期但不持有股票的最大利润。: 表示在第i天结束时,刚刚卖出股票(不再处于冷却期)的最大利润。: 表示在第i天结束时,处于冷却期的最大利润。dp[0]:表示在第i天结束时,手中持有股票的最大利润。dp[1]:表示在第i天结束时,处于冷却期但不持有股票的最大利润。dp[2]:表示在第i天结束时,刚刚卖出股票(不再处于冷却期)的最大利润。dp[3]:表示在第i天结束时,处于冷却期的最大利润,与dp[1]

2024-07-06 15:54:32 1062

原创 代码随想录-Day46

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。

2024-07-03 22:11:40 986

原创 代码随想录-Day45

你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。

2024-07-02 22:10:20 753

原创 代码随想录-Day44

这段代码通过动态规划的完全背包方法,有效解决了最少硬币数量问题,时间复杂度为O(coins.length * amount),空间复杂度为O(amount)。

2024-07-01 22:22:30 935

原创 代码随想录-Day43

与前一个示例相同,定义了物品的重量数组。

2024-06-29 22:02:06 1247

原创 代码随想录-Day42

这段代码通过动态规划解决了“最后一块石头的重量 II”的问题。它将石头分成两堆,使得两堆的重量差最小,从而得到最小的剩余重量。这段代码通过将问题转换为背包问题,使用动态规划求解目标和问题。通过判断特殊情况、计算背包容量和填充动态规划数组,最终得到了满足条件的方案数。这段代码通过将问题转换为背包问题,使用二维动态规划数组来求解目标和问题。通过初始化和填充动态规划数组,最终得到了满足条件的方案数。这段代码通过动态规划解决了“01背包”问题。使用二维数组dp来存储在不同的'0'和'1'

2024-06-27 22:25:20 1120

原创 代码随想录-Day41

题目描述小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。输入描述第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。

2024-06-26 22:19:35 1341

原创 代码随想录-Day39

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?输入:m = 3, n = 7输出:28。

2024-06-25 21:39:07 999

原创 代码随想录-Day38

定义三个整型变量。

2024-06-24 22:31:47 1020

原创 代码随想录-Day37

遍历结束后,别忘了将最后一个有效区间。

2024-06-23 16:28:53 1105

原创 代码随想录-Day36

该算法通过排序和一次遍历来识别可以被同一支箭射中的气球组,确保了使用最少的箭数。这是一种贪心策略,因为它在每一步都做出局部最优的选择(合并重叠的气球),从而达到全局最优解。该算法通过排序和一次遍历来决定哪些区间可以保留以最小化移除数量,采用了贪心策略来逐步构建无重叠的区间集合。该算法同样采取了贪心策略,通过排序和单次遍历确定最少需要移除的区间数,以确保剩余区间无重叠。与前一版本相比,这里的实现更加直接地体现了冲突发生时的选择逻辑(直接在判断中更新pre和增加remove。

2024-06-20 21:51:32 1021

原创 代码随想录-Day35

该算法通过两次遍历确保了每个孩子的糖果数满足题目的两个条件,同时尽可能地减少了糖果的总消耗,是一种既直观又高效的解决方案。该算法通过先排序后构建的方法,有效地解决了队列重建的问题。排序步骤确保了在插入过程中可以直接根据人的身高和前面人数的要求找到合适的位置,而链表的特性支持了在特定位置快速插入元素,从而保证了整体的时间效率。

2024-06-18 22:17:57 1078

原创 代码随想录-Day32

这段代码提供了一个简洁的贪心策略来解决股票交易中的最大利润问题,特别适用于只允许进行一次买入和一次卖出的情况。通过逐天检查能否获得正利润,并立即获取这些利润,从而避免了复杂的动态规划状态维护,降低了算法的时间复杂度至O(n),其中n为股票价格数组的长度。这段代码实现了一个有效且节省空间的解决方案来判断在给定条件下能否完成跳跃游戏。其核心思想是动态维护一个不断扩大的“覆盖范围”,并利用这个范围来决定是否需要继续探索后面的元素,避免了冗余的循环迭代,提高了效率。

2024-06-16 22:21:29 1239

原创 代码随想录-Day31

假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。

2024-06-14 22:23:12 575

原创 代码随想录-Day29

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]示例 2:输入:nums = [4,4,3,2,1]输出:[[4,4]]这段代码定义了一个名为。

2024-06-11 22:23:24 1208

原创 代码随想录-Day28

类成员变量:定义了一个常量,表示 IP 地址的段数。:用于存储所有可能的 IP 地址结果。:用于记录当前正在构建的 IP 地址的四段数值。主要函数:入口函数,初始化 segments 数组,并调用 dfs 函数开始深度优先搜索。dfs 函数终止条件当已经找到 4 段地址 () 并且字符串遍历完 (),说明找到了一个有效 IP,将其添加到结果列表ans中。如果没达到 4 段但字符串已经遍历完,直接返回,因为无法构成有效 IP。特殊处理。

2024-06-08 22:19:37 373

原创 代码随想录-Day27

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。对于给定的输入,保证和为 target 的不同组合数少于 150 个。示例 1:输入:candidates = [2,3,6,7], target = 7。

2024-06-03 22:15:46 622 1

原创 代码随想录-Day25

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:只使用数字1到9每个数字 最多使用一次返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。示例 1:输入: k = 3, n = 7输出: [[1,2,4]]解释:没有其他符合的组合了。示例 2:输入: k = 3, n = 9输出: [[1,2,6], [1,3,5], [2,3,4]]解释:没有其他符合的组合了。

2024-06-01 21:34:28 1156

原创 代码随想录-Day24

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],示例 2:输入:n = 1, k = 1输出:[[1]]

2024-05-30 22:18:57 429

原创 代码随想录-Day23

这段代码定义了一个名为Solution的类,其中包含一个方法trimBST,用于修剪(裁剪)给定二叉搜索树(BST)中的节点,使得所有节点的值在指定的区间内。修剪操作应当保持二叉搜索树的性质。:首先检查根节点root是否为空。如果为空,直接返回null,因为没有节点需要修剪。rootroot.vallowroot.righttrimBSTrootroot.valhighroot.lefttrimBST:当当前节点值符合条件需要保留时,分别对左子树root.left和右子树root.right递归调用。

2024-05-29 22:24:09 1524

原创 代码随想录-Day22

这段代码定义了一个名为Solution的类,用于求解二叉搜索树(Binary Search Tree, BST)中两个指定节点的最近公共祖先(Lowest Common Ancestor, LCA)。rootpqgetPathpqpqnullancestornullroottargetpath注意,这段代码的高效运行依赖于输入是二叉搜索树的特性,即树中任意节点的左子树所有节点的值都小于该节点的值,右子树所有节点的值都大于该节点的值。

2024-05-29 21:46:51 1302

原创 死锁的四个必要条件

存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被链中下一个进程所请求。, Pn}中,P0等待P1占有的资源,P1等待P2占有的资源,……:进程已经至少持有一个资源,但又提出了新的资源请求,而该请求因为资源正被其他进程使用着,所以当前进程被阻塞,同时它对自己已获得的资源保持不放。:资源是独占的,即在同一时间内一个资源只能被一个进程或线程所使用,其他进程或线程无法访问该资源。:进程已获得的资源在未使用完毕之前,不能被其他进程强行剥夺,只能在进程使用完这些资源后自行释放。

2024-05-28 22:27:22 690

原创 代码随想录-Day21

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。这段代码定义了一个名为Solution的类,其中包含两个成员变量pre和ans和dfs。该类主要用于解决一个问题:在一棵给定的二叉搜索树(BST)中找到两个节点之间的最小差值(相邻节点间差值的最小值)。

2024-05-27 21:11:20 900

原创 ArrayList,Hashmap

在Java中,HashMap的put过程主要涉及以下几个步骤来存储键值对(Key-Value pair)。这个过程旨在高效地添加元素,同时尽量保持较好的访问性能。总结来说,HashMap的put方法通过计算哈希值快速定位,使用链表或红黑树解决冲突,并在必要时进行扩容,以高效地存储键值对并维持较好的查询性能。

2024-05-27 15:53:29 927

原创 代码随想录-Day20

给定一个不重复的整数数组 nums。最大二叉树 可以用下面的算法从 nums 递归地构建:创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。返回 nums 构建的 最大二叉树。

2024-05-26 22:25:36 743

原创 黑马点评-短信登录

这段代码是一个Java方法,用于向指定的手机号发送验证码并处理相关逻辑。@Slf4jlog总结来说,这段代码实现了手机号格式校验、验证码生成、验证码存储至Redis以及日志记录的功能,同时展示了在遇到错误时使用异常与直接返回错误结果两种不同处理方式的区别。在代码片段中,使用的Redis数据类型是。这里,方法用于操作Redis中的字符串值。set方法则用于设置键值对,其中键是,值是生成的验证码code,并且设置了过期时间分钟。

2024-05-26 21:37:40 1231

原创 代码随想录-Day18

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。假设二叉树中至少有一个节点。

2024-05-24 19:54:12 1109

原创 代码随想录-Day17

这道题中的平衡二叉树的定义是:二叉树的每个节点的左右子树的高度差的绝对值不超过 111,则二叉树是平衡二叉树。根据定义,一棵二叉树是平衡二叉树,当且仅当其所有子树也都是平衡二叉树,因此可以使用递归的方式判断二叉树是不是平衡二叉树,递归的顺序可以是自顶向下或者自底向上。

2024-05-23 21:36:51 902

原创 代码随想录-Day16

这段代码定义了一个名为Solution的类,其中包含一个方法maxDepth用于计算二叉树的最大深度。最大深度是从根节点到最远叶子节点的最长路径上的边数。方法使用了递归的策略来实现这一计算。introot通过递归调用,该方法能够遍历到二叉树的每一个节点,并通过比较左右子树的深度来确定整棵树的最大深度,是一种分治策略的典型应用。

2024-05-23 21:25:14 998

原创 codeTop100

这段递归代码有效地遍历了二叉树,利用分治策略寻找两个节点的最近公共祖先。其核心思想在于,如果两个节点分别位于当前节点的左右两侧,则当前节点即为它们的最近公共祖先;如果它们都位于同一侧,则继续在那一侧的子树中寻找。这种方法的时间复杂度为O(N),其中N是树中的节点数,因为在最坏的情况下,每个节点都会被访问一次。为了将方法改成符合ACM竞赛模式,我们需要调整代码以使用标准输入和输出,并定义TreeNode类。int val;val = x;if(!

2024-05-23 20:12:30 1103

原创 代码随想录-Day15

102. 二叉树的层序遍历 方法:广度优先搜索 class Solution { public List<List<Integer>> levelOrder(TreeNode root) { List<List<Integer>> ret = new ArrayList<List<Integer>>(); if (root == null) { return ret;

2024-05-23 12:00:11 917

原创 代码随想录-Day14

这段代码定义了一个名为Solution的类,该类实现了对一棵二叉树进行前序遍历的功能。前序遍历的顺序是访问根节点 -> 左子树 -> 右子树。ArrayList**辅助方法preorderroot.valresroot.leftroot.right综上所述,这段代码通过定义一个主方法提供给外部调用,并利用私有辅助方法preorder实现具体的递归逻辑,完成了对二叉树的前序遍历过程,将遍历结果保存在一个整数列表中返回。

2024-05-23 11:06:57 382

原创 代码随想录-Day13

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回 滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]intint这段代码定义了一个名为Solution的类,其中包含一个方法,用于求解数组中大小为k的滑动窗口里的最大值。该方法利用优先队列(具体实现为。

2024-05-23 10:55:41 906

原创 代码随想录-Day11

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false这段代码是一个 Java 函数,属于一个名为Solution的类,该函数用于检查一个字符串s。

2024-05-22 15:48:13 757

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除