
贪心算法
文章平均质量分 67
特点:局部最优;不保证全局最优;简单迅速
liujjjiyun
这个作者很懒,什么都没留下…
展开
-
跳跃游戏II
给定一个长度为n的整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向后跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意i + j < n返回到达的最小跳跃次数。生成的测试用例可以到达。2跳到最后一个位置的最小跳跃数是2。从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。2。原创 2025-04-07 21:29:19 · 356 阅读 · 0 评论 -
跳跃游戏
给你一个非负整数数组nums,你最初位于数组的。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回true;否则,返回false。true可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。false无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。原创 2025-04-07 21:20:46 · 145 阅读 · 0 评论 -
文本左右对齐
定义函数 add_str(int start, int end, int len, int maxWidth, vector<string>& words) ,其作用是生成一行字符串,参数 start 表示该行的首个单词下标,end 表示下一行的首个单词下标,len 表示该行单词长度,不包括空格,maxWidth 表示该行长度,words 表示所有单词。生成每行字符串:按序遍历单词,累加单词长度,判断累加单词长度+应需空格长度是否小于每行最大长度,是,表示可以容纳该单词,则累加单词长度;原创 2025-03-15 16:40:10 · 791 阅读 · 0 评论 -
罗马数字转整数
罗马数字包含以下七种字符:IVXLCD和M。例如, 罗马数字2写做II,即为两个并列的 1。12写做XII,即为XII。27写做XXVII, 即为XXVII。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做IIII,而是IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为IX。IVXXLCCDM给定一个罗马数字,将其转换成整数。原创 2025-03-08 18:24:22 · 457 阅读 · 0 评论 -
分发糖果
你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。请你给每个孩子分发糖果,计算并返回需要准备的。表示每个孩子的评分。原创 2025-03-08 16:32:57 · 119 阅读 · 0 评论 -
加油站
你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。开往 4 号加油站,此时油箱有 4 - 1 + 5 = 8 升汽油。开往 1 号加油站,此时油箱有 7 - 3 + 2 = 6 升汽油。开往 2 号加油站,此时油箱有 6 - 4 + 3 = 5 升汽油。开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。原创 2025-03-08 16:22:22 · 301 阅读 · 0 评论 -
买卖股票的最佳时机 II
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。原创 2025-03-02 18:22:21 · 1042 阅读 · 0 评论 -
买卖股票的最佳时机
总之,这段代码通过一次遍历价格数组,动态地跟踪最低价格和最大利润,从而有效地解决了股票买卖问题,时间复杂度为 O(n),其中 n 是价格数组的长度。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。原创 2025-03-02 17:53:43 · 261 阅读 · 0 评论 -
贪心算法-柜台提供服务问题
就是优先给给用户提供服务的时间的最少的柜台分配用户,然后再试着给其他的花费比较少时间的柜台分配用户。原创 2025-02-22 17:58:03 · 204 阅读 · 0 评论 -
贪心算法-部分背包问题
有n个物体,第i个物体的重量为wi,价值为vi。在总重量不超过C的情况下让总价值尽量高。也就是说,每一个物体都可以只取走一部分,价值和重量按比例计算。求最大总价值。也就是说,贪心算法可以一定要把c占满,优先把价值高的往里放。原创 2025-02-22 17:56:12 · 130 阅读 · 0 评论 -
贪心算法-硬币问题
刚开始一直选5分硬币,选不了5分的硬币了,就选3分的,3分的硬币也选不了了,就选1分的硬币。,就是一直优先选大的面值的硬币。原创 2025-02-22 17:54:15 · 221 阅读 · 0 评论 -
贪心算法
贪心算法:符合每一步的最优解,但是不一定是原问题的最优解 。原创 2025-02-22 17:52:21 · 179 阅读 · 0 评论 -
小M的得分挑战
并且计算这两个数的乘积作为分数。为了最大化分数,我们可以先对数组进行排序,然后从最大的数开始,尝试找到与其差值不超过。题目要求在给定的数组中选择两个数,使得它们的差值不超过。小M每次可以选择两个整数,并且这两个数的差值不能超过。小M会获得这两个数的乘积作为分数,并且已经被选择过的数不能再被选择。通过贪心策略,每次选择当前最大的数和与其差值不超过。你需要帮助小M计算,最多能获得多少分数?的数进行配对,可以保证每次选择的数对乘积最大化。原创 2025-01-25 18:18:17 · 358 阅读 · 0 评论 -
小Q的奇偶操作数组
题目要求在给定的 k 次操作中,通过特定的操作规则(奇数乘以2,偶数乘以2再加1)使得数组元素之和最小。核心在于每次操作都选择当前数组中最小的元素进行操作,因为这样可以尽可能地减少数组元素之和的增长。通过使用最小堆(优先队列)来维护数组中的最小元素,可以在 O(logn) 的时间内找到并更新最小元素,从而实现高效的贪心策略。小Q想知道,经过 kk 次操作后,数组的元素之和最小可以是多少。次操作后,使得数组的元素之和最小。原创 2025-01-21 11:19:32 · 647 阅读 · 0 评论 -
礼物价值
我们可以使用一个二维数组。原创 2025-01-18 17:05:32 · 691 阅读 · 0 评论 -
相邻重复字母删除问题
题目要求删除字符串中所有相邻且相同的字母,直到无法再删除任何字母。核心信息是每次删除相邻的重复字母,直到字符串中不再有相邻的重复字母。选用栈作为数据结构来解决这个问题,因为栈可以方便地处理相邻元素的比较和删除操作。通过遍历字符串,将字符依次压入栈中,如果当前字符与栈顶字符相同,则弹出栈顶字符,否则将当前字符压入栈中。最终栈中剩余的字符即为处理完所有重复项删除操作后的字符串。请返回最终处理完所有重复项删除操作后的字符串。可以保证返回的答案是唯一的。她发现可以进行一种操作:选择两个相邻且相同的字母并删除它们。原创 2025-01-17 19:09:33 · 250 阅读 · 0 评论 -
最优硬币组合问题
小C有多种不同面值的硬币,每种硬币的数量是无限的。他希望知道,如何使用最少数量的硬币,凑出给定的总金额N。小C对硬币的组合方式很感兴趣,但他更希望在满足总金额的同时,使用的硬币数量尽可能少。题目要求使用最少数量的硬币凑出给定的总金额。这是一个典型的动态规划问题,可以通过构建一个动态规划数组。记录每个金额对应的最后一个硬币面值,以便在最后回溯出具体的硬币组合。来记录凑出每个金额所需的最少硬币数量。例如:小C有三种硬币,面值分别为。一种最优的方案是使用三个。面值的硬币,总共五个硬币。**初始化动态规划数组。原创 2025-01-16 13:12:07 · 365 阅读 · 0 评论 -
价格优惠计算问题
题目要求计算小F能获得的总优惠,优惠的条件是当前商品的价格大于等于前面某个商品的价格,且该商品是离当前商品最近的满足条件的商品。每件商品有一个价格p[i]p[i],小F可以获得的优惠取决于该商品之前的一件商品。如果某一件商品的价格p[i]p[i]大于等于前面的某个商品p[j]p[j],则小F可以享受该商品p[j]p[j]的价格作为优惠,前提是p[j]p[j]是离p[i]p[i]最近的且满足条件的商品。具体来说,如果某件商品的价格大于等于它之前某个商品的价格,那么小F可以享受那个商品的价格作为优惠。原创 2025-01-13 15:05:29 · 659 阅读 · 0 评论 -
小E的按位与挑战
题目要求从给定的数组中选择一个或多个数,使得这些数的按位与结果不为0,并且这个结果可以被2m整除,同时要求m尽可能大。核心信息是按位与结果不为0,且能被2m整除,这意味着按位与结果的最低m位必须全为0,而第m+1位必须为1。为了最大化m,我们需要找到一个子集,使得其按位与结果的第m+1位为1,而第m位及以下全为0。的数组,她想从中选择一个或多个数,使得这些数的按位与(AND)的结果不为0,并且这个结果可以被。她的目标是选取这样的数,使得整数。你需要帮助小E找到能够使得。原创 2025-01-04 18:03:42 · 389 阅读 · 0 评论 -
最小字符串价值问题
次操作将字符串的价值最小化。字符串的价值定义为删除相邻相同字符后剩下的字符长度。我们可以通过栈来模拟删除相邻相同字符的过程,然后利用贪心策略来决定如何进行。他可以进行一些操作来修改字符串,并且有一个目标:将字符串的价值最小化。所谓字符串的价值,是指通过多次操作删除相邻的相同字符后剩下的字符长度。次修改,目的是让最终得到的字符串价值尽可能小。小M每次操作可以选择修改其中的一个字符,次操作后,字符串的最小价值吗?次操作以最小化字符串的价值。你能帮助小M计算通过。原创 2024-12-30 18:45:29 · 452 阅读 · 0 评论 -
小R的排列挑战
排列中的数字是。原创 2024-12-28 10:30:24 · 498 阅读 · 0 评论 -
小S的飞机大战游戏策略
小S正在玩一款飞机大战游戏,他在每个关卡中会面对多个敌人,每个敌人的血量为DiDi。现在,小S希望知道在每个关卡中,他最少需要按多少次发射键才能消灭所有敌人。小S需要消灭所有敌人,每个敌人有不同的血量。通过这种策略,我们可以确保在最少的按键次数内消灭所有敌人。目标是找到消灭所有敌人所需的最少按键次数。我们可以使用一个数组来存储每个敌人的血量。原创 2024-12-20 21:38:00 · 251 阅读 · 0 评论 -
字符串趋同最小代价问题
通过上述步骤,你可以逐步实现一个算法来计算将两个二进制字符串修改为相同字符串的最小总成本。原创 2024-12-19 17:50:15 · 631 阅读 · 0 评论 -
小U的无趣数组
小U有一个长度为n的数组。如果数组中存在长度为 3 的子数组,满足,则这个数组被称为“有趣的”。小U可以通过修改数组中的某个元素来打破这种“有趣”的性质。她想知道,最少需要进行多少次操作才能使数组变得不再有趣。原创 2024-12-14 15:20:35 · 476 阅读 · 0 评论 -
剪绳子 剑指offer
给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1,并且m>1),每段绳子的长度记为k[0],k[1],...k[m]。请问k[0]*k[1]*...k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18。原创 2024-12-07 18:32:38 · 258 阅读 · 0 评论