算法
文章平均质量分 58
Chase-Hart
如果你认为计算机科学只是关于坐在电脑前敲键盘直到手指抽筋,那你就错了。我们还会学习如何用咖啡续命,以及如何在bug出现时保持微笑
展开
-
【每日一题】LeetCode 3200.最大高度的三角形组成问题(枚举)
给定两个整数red和blue,分别代表红色球和蓝色球的数量。任务是使用这些球来组成一个三角形,其中第 1 行有 1 个球,第 2 行有 2 个球,第 3 行有 3 个球,以此类推。每一行的球必须是相同颜色,且相邻行的颜色必须不同。我们需要返回可以实现的三角形的最大高度。原创 2024-10-15 16:50:57 · 463 阅读 · 0 评论 -
【每日一题】LeetCode 2516.每种字符至少取k个(哈希表、字符串、滑动窗口)
给定一个由字符 ‘a’、‘b’、‘c’ 组成的字符串s和一个非负整数k。每分钟,你可以选择取走s最左侧或最右侧的那个字符。你必须取走每种字符至少k个,返回需要的最少分钟数;如果无法取到,则返回-1。原创 2024-09-27 13:08:53 · 684 阅读 · 0 评论 -
【每日一题】LeetCode 2353.数组元素和与数字和的绝对差(数组、数学)
给定一个正整数数组nums最终,我们需要返回这两个和之间的绝对差值。原创 2024-09-27 13:08:02 · 403 阅读 · 0 评论 -
【每日一题】LeetCode 2306.公司命名(位运算、数组、哈希表、字符串、枚举)
给定一个字符串数组ideas,表示在公司命名过程中使用的名字列表。我们需要从ideas中选择两个不同的名字,称为ideaA和ideaB。然后交换ideaA和ideaB的首字母。如果交换后得到的两个新名字都不在ideas中,那么这两个名字串联起来(中间用一个空格分隔)就是一个有效的公司名字。我们需要返回不同且有效的公司名字的总数。原创 2024-09-25 20:36:21 · 550 阅读 · 0 评论 -
【每日一题】LeetCode 2207.字符串中最多数目的子序列(贪心、字符串、前缀和)
给定一个字符串text和一个长度为2的字符串pattern,两者都由小写英文字母组成。你可以在text中任意位置插入一个字符,这个插入的字符必须是pattern[0]或者pattern[1]。插入后,需要计算text中最多可以包含多少个等于pattern的子序列。定义为:将一个字符串删除若干个字符后(也可以不删除),剩余字符保持原本顺序得到的字符串。原创 2024-09-24 22:15:05 · 691 阅读 · 0 评论 -
【每日一题】LeetCode 1014.最佳观光组合(数组、动态规划、枚举右维护左)
枚举右,维护左。给定一个正整数数组values,其中values[i]表示第i个观光景点的评分,并且两个景点i和j之间的距离为j - i。一对观光景点(i < j)组成的观光组合的得分为,也就是景点的评分之和减去它们两者之间的距离。要求返回一对观光景点能取得的最高分。原创 2024-09-23 19:32:42 · 613 阅读 · 0 评论 -
【每日一题】LeetCode 2374.边积分最高节点(图、哈希表)
本文介绍了一个算法问题,即在一个有向图中找到边积分最高的节点。图中有 `n` 个节点,每个节点都有一个出边指向另一个节点。边积分定义为所有指向某个节点的边的起始节点编号之和。算法的核心步骤包括初始化边积分数组、计算每个节点的边积分、遍历数组找到边积分最大的节点,并返回其编号。文章提供了详细的思路分析、输入示例和代码实现,代码中包含了清晰的注释,以帮助理解算法的逻辑。原创 2024-09-21 21:15:48 · 880 阅读 · 0 评论 -
【每日一题】LeetCode 2414.最长字母序连续子字符串的长度(字符串)
是由字母表中连续字母组成的字符串。换句话说,字符串的任意子字符串都是。"abc""acb""za"给你一个仅由小写英文字母组成的字符串s,返回其的 字母序连续子字符串 的长度。原创 2024-09-19 19:21:13 · 492 阅读 · 0 评论 -
【每日一题】LeetCode 2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)
给你一个下标从开始长度为n的整数数组buses,其中buses[i]表示第i辆公交车的出发时间。同时给你一个下标从开始长度为m的整数数组passengers,其中表示第j位乘客的到达时间。所有公交车出发的时间互不相同,所有乘客到达的时间也互不相同。给你一个整数capacity,表示每辆公交车能容纳的乘客数目。每位乘客都会搭乘下一辆有座位的公交车。如果你在y时刻到达,公交在x时刻出发,满足y原创 2024-09-18 01:13:05 · 1022 阅读 · 0 评论 -
【每日一题】LeetCode 7.整数反转(数学)
给定一个 32 位的有符号整数x,编写一个函数,将x中的数字部分反转。如果反转后的整数超出了 32 位有符号整数的范围,则返回 0。假设环境不允许存储 64 位整数。原创 2024-09-17 23:58:03 · 478 阅读 · 0 评论 -
【每日一题】LeetCode 815.公交路线(广度优先搜索、数组、哈希表)
给定一个表示公交线路的数组routes,其中每个routes[i]表示第i辆公交车的循环行驶路线。现在从source车站出发,要前往target车站,期间只能乘坐公交车。要求找出最少乘坐的公交车数量。如果无法到达目标车站,则返回-1。原创 2024-09-17 23:57:33 · 1012 阅读 · 0 评论 -
【每日一题】LeetCode 1184.公交站间的距离问题(数组)
在环形公交路线上有n个站,这些站点按照顺序从0到n - 1进行编号。我们已知每一对相邻公交站之间的距离,表示编号为i的车站和编号为的车站之间的距离。环线上的公交车都可以按顺时针和逆时针的方向行驶。现在需要计算从出发点start到目的地之间的最短距离。原创 2024-09-16 10:43:10 · 644 阅读 · 0 评论 -
【每日一题】LeetCode 2848.与车相交的点(数组、哈希表、前缀和)
本文介绍了一种算法问题,即计算数轴上被车辆覆盖的整数点的总数。给定一个二维整数数组 nums,其中每个子数组 nums[i] 包含两个整数,分别表示车辆的起点和终点。我们的目标是找出数轴上所有至少被一辆车覆盖的整数点的数量。文章首先提供了问题的描述,然后详细分析了解决问题的思路。接着,给出了两个具体的输入示例和对应的输出结果,以帮助读者更好地理解问题。最后,文章提供了完整的Java代码实现,并附上了详细的注释,解释了代码的每个部分是如何工作的。原创 2024-09-15 14:37:41 · 555 阅读 · 0 评论 -
【每日一题】LeetCode 2390 从字符串中移除星号(栈、字符串、模拟)
本文介绍了一个字符串处理问题,即如何通过一系列操作移除字符串中的所有星号 *。操作规则是:每次选中一个星号,然后移除该星号左侧最近的非星号字符以及该星号本身。文章提供了详细的思路分析,说明了如何使用栈(或 StringBuffer)来模拟这个过程。最后,文章给出了具体的Java代码实现,并对代码进行了详细注释,以便读者理解每一步的操作和逻辑。原创 2024-09-14 10:33:07 · 643 阅读 · 0 评论 -
【每日一题】LeetCode 2398.预算内的最多机器人数目(滑动窗口、数组、二分查找、前缀和、堆(优先队列))
本文介绍了一种优化算法,用于解决在给定预算下,最多可以连续运行多少个机器人的问题。算法的核心思想是使用双端队列(Deque)来维护一个单调递减的充电时间序列,通过扩展和收缩滑动窗口来找到不超过预算的最大机器人数量。具体步骤包括:遍历每个机器人,将其索引加入到队列中,累加运行成本,并在必要时通过移除窗口左侧的机器人来缩小窗口,直到总开销不超过预算。最后,更新并返回记录的最大机器人数量。优化后的代码实现了这一算法,并通过注释详细解释了每一步的逻辑。原创 2024-09-13 18:45:18 · 1023 阅读 · 0 评论 -
【每日一题】LeetCode 2576.求出最多标记下标(贪心、数组、双指针、二分查找、排序)
在这篇文章中,作者介绍了一个算法问题,即在一个整数数组中,通过特定的操作来标记尽可能多的下标。操作规则是选择两个未标记的下标 i 和 j,使得 2 倍的第 i 个元素小于等于第 j 个元素,然后标记这两个下标。文章提供了问题的详细描述、思路分析、输入示例以及代码实现。作者通过贪心算法解决了这个问题,首先对数组进行排序,然后使用双指针技术从数组两端开始操作,直到无法再找到满足条件的下标对。最后,文章提供了详细的代码实现,并对代码进行了注释,以便读者更好地理解算法的逻辑。原创 2024-09-12 16:27:56 · 698 阅读 · 0 评论 -
【每日一题】LeetCode 98.验证二叉搜索树(树、深度优先搜索、二叉搜索树、二叉树)
本文探讨了如何判断一个给定的二叉树是否为有效的二叉搜索树(BST)。有效的BST需满足三个条件:左子树的节点值小于当前节点值,右子树的节点值大于当前节点值,以及所有子树本身也必须是BST。文章提出了一种递归算法,通过定义辅助函数 dfs 来遍历树的每个节点,并根据节点值与给定的最小值和最大值限制进行比较,从而确定树是否满足BST的条件。文章还提供了详细的Java代码实现,包括对 TreeNode 类和 Solution 类的定义,以及对递归函数 dfs 的详细注释,确保了代码的清晰性和易理解性。原创 2024-09-11 23:28:01 · 478 阅读 · 0 评论 -
【每日一题】LeetCode 94.二叉树的中序遍历(栈、树、深度优先搜索、二叉树)
本文介绍了如何实现二叉树的中序遍历,即按照左-根-右的顺序访问树中的每个节点。文章首先阐述了中序遍历的基本概念和递归算法的逻辑流程,然后提供了Java语言的详细代码实现。代码实现部分包含了对每个函数和递归调用的详细注释,确保了代码的可读性和易理解性。原创 2024-09-11 01:16:34 · 578 阅读 · 0 评论 -
【每日一题】LeetCode 104.二叉树的最大深度(树、深度优先搜索、广度优先搜索、二叉树)
本文介绍了如何计算二叉树的最大深度,即从根节点到最远叶子节点的最长路径上的节点数。通过递归方法,从根节点开始,逐层向下遍历树的每个节点,同时记录当前的深度。当遇到 null 节点时,返回当前深度减一。递归过程中,分别计算左子树和右子树的最大深度,并取两者的最大值。文章提供了详细的Java代码实现,包括 maxDepth 方法和 dfs 递归方法,以及对每个步骤的详细注释,确保了代码的可读性和易理解性。原创 2024-09-10 00:28:23 · 403 阅读 · 0 评论 -
【每日一题】LeetCode 1052.爱生气的书店老板(数组、滑动窗口)
这篇文章是关于如何优化书店老板让顾客满意的算法问题的解决方案。文章首先提出了问题背景,即书店老板如何在有限的时间内最大化顾客满意度。接着,文章详细分析了问题,并提出了使用滑动窗口技术来解决这个问题。文章的核心是展示如何通过维护一个当前窗口的总顾客数量来避免重复计算,从而提高算法的效率。最后,文章提供了优化后的代码实现,并通过注释详细解释了代码的工作原理,使得读者能够更好地理解和应用这个优化算法。原创 2024-09-10 00:27:53 · 313 阅读 · 0 评论 -
【每日一题】LeetCode 2841.几乎唯一子数组的最大和(数组、哈希、滑动窗口)
这篇文章探讨了一个有趣的算法问题,即在给定的整数数组 nums 中寻找长度为 k 的“几乎唯一”子数组的最大和。所谓“几乎唯一”子数组,指的是子数组中至少有 m 个互不相同的元素。文章首先定义了问题的具体要求,包括输入数组 nums、正整数 m 和 k 的含义。接着,文章通过示例详细说明了如何识别这样的子数组,并计算其和。文章的核心部分是对算法的详细分析,包括如何使用滑动窗口技术来高效地找到满足条件的子数组,并计算其最大和。最后,文章提供了完整的代码实现,包括对关键代码段的注释,以便读者能够更好地理解算法。原创 2024-09-09 22:24:45 · 527 阅读 · 0 评论 -
【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)
本文介绍了一种算法,用于处理链表中的特定问题:给定一个以0分隔整数序列的链表,算法将每两个0之间的整数合并为一个节点,其值为该区间内所有整数的和,并移除所有0。通过创建一个虚拟头节点和遍历原链表,算法有效地构建了一个新的链表,其中不包含任何0,每个新节点的值是原链表中相邻0之间整数的累加和。最终,算法返回了修改后的链表头节点。原创 2024-09-09 01:47:52 · 1013 阅读 · 0 评论 -
【每日一题】LeetCode 112.路径总和(树、深度优先搜索、广度优先搜索、二叉树)
本文介绍了一种算法,用于判断给定的二叉树中是否存在一条从根节点到叶子节点的路径,使得路径上所有节点的值之和等于一个给定的目标和。通过深度优先搜索(DFS)的方式,我们可以递归地遍历二叉树的每个节点,并在到达叶子节点时检查当前路径的和是否与目标和相等。如果存在这样的路径,则返回 true,否则返回 false。文章提供了详细的思路分析、输入示例以及完整的代码实现,代码中包含了详细的注释,以便读者更好地理解算法的实现过程。原创 2024-09-09 00:36:20 · 351 阅读 · 0 评论 -
【每日一题】LeetCode 977.有序数组的平方 (数组、双指针、排序)
本文介绍了一种算法问题:给定一个按非递减顺序排序的整数数组,要求返回每个数字的平方组成的新数组,并且新数组也按非递减顺序排序。我们探讨了两种解决方案:一种是直接对数组进行平方操作后排序的暴力法,另一种是利用双指针技术优化的高效方法。通过比较两种方法,我们发现双指针法在时间复杂度上具有明显优势,能够以 O(n) 的时间复杂度解决问题,避免了额外的排序步骤。文章提供了详细的代码实现和优化思路分析,旨在帮助读者更好地理解和掌握这一问题的解决方案。原创 2024-09-08 17:51:57 · 690 阅读 · 0 评论 -
【每日一题】LeetCode 20.有效的括号(栈、字符串)
本文讨论了如何判断一个由括号字符组成的字符串是否为有效的括号序列。有效的括号序列需满足两个条件:左括号必须正确闭合,且闭合顺序必须正确。文章提供了一个基于栈的算法解决方案,该算法通过遍历字符串,使用栈来跟踪未闭合的左括号。对于每个遇到的右括号,算法检查栈顶是否有对应的左括号,并确保它们是匹配的。如果遇到不匹配的情况或栈在遍历结束后不为空,则字符串不是有效的括号序列。文章还包含了算法的Java代码实现,并对代码进行了详细注释,以帮助读者理解其工作原理。原创 2024-09-08 02:03:18 · 492 阅读 · 0 评论 -
【每日一题】LeetCode 2379.得到K个黑块的最少涂色次数(字符串、滑动窗口)
在解决涉及连续子串或子数组问题时,滑动窗口技术是一种非常有效的算法策略。这种技术的核心思想是维护一个动态的窗口,通过不断调整窗口的边界来遍历整个数据集合,从而找到满足特定条件的子串或子数组。本文将用滑动窗口解决字符串的经典题目原创 2024-09-07 00:21:35 · 411 阅读 · 0 评论 -
【每日一题】LeetCode 1652.拆炸弹(数组、滑动窗口)
你有一个炸弹需要拆除,时间紧迫!你的情报员会给你一个长度为n的循环数组code以及一个密钥k。为了获得正确的密码,你需要替换掉每一个数字。其实这是一个LeetCode上的题目,运用滑窗即可解决,一起来拆炸弹吧!!!原创 2024-09-06 00:10:20 · 407 阅读 · 0 评论 -
【每日一题】LeetCode 84.柱状图中最大的矩形(栈、数组、单调栈)
在探索“柱状图中最大的矩形”问题的过程中,我经历了从暴力解法到优化算法的转变。这个挑战不仅考验了我的编程技能,也锻炼了我的耐心和解决问题的决心。通过与同学的深入讨论和不断的尝试,我们最终采用了单调栈的方法,这不仅提高了算法的效率,也让我深刻体会到了数据结构的力量和算法优化的重要性。这篇文章记录了我的解题心得和对算法学习的感悟,强调了面对挑战时保持热情和好奇心的重要性。我希望通过分享我的经历,鼓励所有算法学习者不畏艰难,持续探索,共同成长,一起在算法的道路上遇见更好的自己。原创 2024-09-05 21:42:45 · 1275 阅读 · 0 评论 -
【每日一题】LeetCode 3174.清除数字(栈、字符串、模拟)
本文介绍了一种算法,用于删除给定字符串中的所有数字字符。算法的核心思想是利用栈的数据结构来处理字符串,确保在删除数字字符的同时,也删除其左侧最近的非数字字符。首先,我们遍历字符串中的每个字符,使用栈来存储非数字字符。当遇到数字字符时,如果栈不为空,则弹出栈顶元素。遍历结束后,栈中剩余的元素即为删除所有数字字符后的字符串。原创 2024-09-05 01:26:32 · 467 阅读 · 0 评论 -
【每日一题】LeetCode 2708.一个小组的最大实力值(一次遍历、分类讨论、动态规划)
问题难点:数组中可能包含负数,这使得最大乘积的计算变得复杂,因为负数的乘积可能在某些情况下变为正数。算法思路:采用动态规划方法,通过维护两个变量 mn(最小乘积)和 mx(最大乘积),遍历数组中的每个元素,并考虑是否将其加入到当前的乘积中,以此来更新 mn 和 mx。算法实现:代码通过迭代数组中的每个元素,对于每个元素,考虑不包括和包括该元素两种情况,分别更新 mn 和 mx。最终返回 mx 作为可能的最大乘积值。原创 2024-09-05 00:01:13 · 1218 阅读 · 0 评论 -
【算法】单词出现次数和位置统计
编写一个程序,用于统计一个给定单词在一段文本中出现的次数以及第一次出现的位置。如果单词在文本中出现,则输出出现次数和第一次出现的位置(位置从0开始计算)。如果单词没有出现,则输出-1。原创 2024-09-04 21:39:45 · 465 阅读 · 0 评论 -
【每日一题】LeetCode.2860让所有学生保持开心的分组方法数(枚举、数组、排序)
给定一个整数数组nums,表示班级中学生的总数,班主任希望在让所有学生保持开心的情况下选出一组学生。如果满足以下两个条件之一,则认为第inums[i]nums[i]返回能够满足让所有学生保持开心的分组方法的数目。原创 2024-09-04 20:47:19 · 302 阅读 · 0 评论 -
【每日一题】LeetCode.739每日温度(单调栈、数组、栈)
利用单调栈,解决一些问题,如:给定一个整数数组,表示每天的温度,需要返回一个数组answer,其中answer[i]表示对于第i天,下一个更高温度出现的天数。如果气温在这之后都不会升高,则在该位置用0来代替。原创 2024-09-04 20:36:49 · 392 阅读 · 0 评论 -
【每日一题】LeetCode 1004.最大连续1的个数 III(数组、双指针、滑动窗口)
本文讲述如何用双指针、滑动窗口解决数组统计连续的最大的相同的数据个数、字符串连续出现的最长字符,题目:给定一个二进制数组nums和一个整数k,如果可以翻转最多k个 0,则返回数组中连续 1 的最大个数。原创 2024-09-03 00:34:49 · 303 阅读 · 0 评论 -
【每日一题】LeetCode 485.最大连续1的个数 (数组、滑动窗口、双指针)
本文讲述如何用滑动窗口,解决统计数组、统计字符串最大出现次数的问题,文章含解题思路、具体代码。原创 2024-09-02 16:01:22 · 255 阅读 · 0 评论 -
【每日一题】LeetCode 2024.考试的最大困扰度(字符串、二分查找、前缀和、滑动窗口)
本文介绍了一种解决特定字符串处理问题的算法——滑动窗口算法。问题背景是给定一个由判断题答案组成的字符串 answerKey 和一个整数 k,目标是通过最多 k 次操作(每次操作可以改变一个字符的值),最大化字符串中连续相同字符('T' 或 'F')的数量。文章首先对问题进行了描述,并提出了使用滑动窗口算法来解决这个问题。接着,详细分析了算法的思路,包括初始化、遍历字符串、更新窗口和计算最大长度等步骤。最后,提供了详细的代码实现和注释,帮助读者更好地理解算法的具体操作和逻辑。原创 2024-09-02 01:35:17 · 525 阅读 · 0 评论 -
【每日一题】LeetCode 3.最长无重复字符的子串(哈希表、字符串、滑动窗口)
本文介绍运用哈希表、滑动窗口解决字符串问题(找出其中不含有重复字符的最长子串的长度)原创 2024-09-02 00:05:37 · 424 阅读 · 0 评论 -
【每日一题】LeetCode 2236.判断根节点是否等于子节点之和(树、二叉树、递归)
本文介绍了一个算法问题,即判断一个由三个节点组成的二叉树的根节点值是否等于其两个子节点值之和。文章首先提供了问题描述,然后详细分析了解题思路,包括访问根节点和子节点以及比较它们的值。接着,文章给出了两个具体的输入示例及其对应的输出结果。最后,文章提供了Java语言的代码实现,并附上了详细的注释,解释了代码的逻辑和关键步骤。原创 2024-09-01 20:09:25 · 541 阅读 · 0 评论 -
【每日一题】LeetCode 2090.半径为 k 的子数组平均值问题(数组、滑动窗口)
本文将讲述运用滑窗解决子数组问题原创 2024-09-01 10:33:56 · 415 阅读 · 0 评论 -
【每日一题】LeetCode 1450.正在做作业的学生数量问题(数组、枚举)
给定两个整数数组startTime和endTime,分别代表学生的开始和结束写作业的时间。同时给定一个整数queryTime作为查询时间。需要找出在queryTime时刻正在写作业的学生人数。如果queryTime落在某个学生的开始和结束时间之间(包括边界),则该学生在queryTime时刻正在写作业。原创 2024-09-01 02:35:58 · 315 阅读 · 0 评论