贪心算法
该专栏主要是一些关于贪心算法的题解
jump_into_zehe
这个作者很懒,什么都没留下…
展开
-
跳跃游戏--贪心算法
LeetCode跳跃游戏给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。解法:贪心算法解题思路:给定一个数组,数组的元素表示我们可以跳的最大长度,我们想以最少的跳跃次数到达终点,我们思路应该是这原创 2020-07-25 13:39:12 · 685 阅读 · 0 评论 -
柠檬水找零--贪心算法
LeetCode柠檬水找零在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20]输出:true原创 2020-07-25 11:34:55 · 390 阅读 · 0 评论 -
不浪费原料的汉堡制作方案--贪心算法
LeetCode不浪费原料的汉堡制作方案圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。给你两个整数 tomatoSlices 和 cheeseSlices,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下:巨无霸汉堡:4 片番茄和 1 片奶酪小皇堡:2 片番茄和 1 片奶酪请你以 [total_jumbo, total_small]([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使原创 2020-07-25 10:57:42 · 329 阅读 · 0 评论 -
买卖股票的最佳时机含手续费--贪心算法
LeetCode买卖股票的最佳时机含手续费给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;非负整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。示例 1:输入: prices = [1, 3, 2, 8, 4, 9], fee = 2输出: 8解原创 2020-07-25 00:10:17 · 339 阅读 · 0 评论 -
救生艇--贪心算法
LeetCode救生艇第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。示例 1:输入:people = [1,2], limit = 3输出:1解释:1 艘船载 (1, 2)示例 2:输入:people = [3,2,2,1], limit = 3输出:3解释:3 艘船分别载 (1, 2), (2) 和 (3)示例 3:原创 2020-07-24 22:08:44 · 226 阅读 · 0 评论 -
最多可以参加的会议数目--贪心算法
LeetCode最多可以参加的会议数目给你一个数组 event ,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你原创 2020-07-24 18:24:21 · 1281 阅读 · 0 评论 -
检查一个字符串是否可以打破另一个字符串--贪心算法
LeetCode检查一个字符串是否可以打破另一个字符串给你两个字符串 s1 和 s2 ,它们长度相等,请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列,或者是否存在一个 s2 的排列可以打破 s1 的一个排列。字符串 x 可以打破字符串 y (两者长度都为 n )需满足对于所有 i(在 0 到 n - 1 之间)都有 x[i] >= y[i](字典序意义下的顺序)。给你两个字符串 s1 和 s2 ,它们长度相等,请你检查是否存在一个 s1 的排列可以打破 s2 的一个排列,或者原创 2020-07-23 22:21:33 · 156 阅读 · 0 评论 -
数组大小减半--贪心算法
LeetCode数组大小减半给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。返回 至少 能删除数组中的一半整数的整数集合的最小大小。示例 1:输入:arr = [3,3,3,3,5,5,5,2,2,7]输出:2解释:选择 {3,7} 使得结果数组为 [5,5,5,2,2]、长度为 5(原数组长度的一半)。大小为 2 的可行集合有 {3,5},{3,2},{5,2}。选择 {2,7} 是不可行的,它的结果数组为 [3,3,3,3,5,5,5],新数组长原创 2020-07-23 21:35:51 · 513 阅读 · 0 评论 -
安排电影院座位--贪心算法
LeetCode安排电影院座位如上图所示,电影院的观影厅中有 n 行座位,行编号从 1 到 n ,且每一行内总共有 10 个座位,列编号从 1 到 10 。给你数组 reservedSeats ,包含所有已经被预约了的座位。比如说,researvedSeats[i]=[3,8] ,它表示第 3 行第 8 个座位被预约了。请你返回 最多能安排多少个 4 人家庭 。4 人家庭要占据 同一行内连续 的 4 个座位。隔着过道的座位(比方说 [3,3] 和 [3,4])不是连续的座位,但是如果你可以将 4原创 2020-07-23 18:20:42 · 8409 阅读 · 0 评论 -
交换字符使得字符串相同--贪心算法
LeetCode交换字符使得字符串相同有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 “x” 和 “y”,你需要通过「交换字符」的方式使这两个字符串相同。每次「交换字符」的时候,你都可以在两个字符串中各选一个字符进行交换。交换只能发生在两个不同的字符串之间,绝对不能发生在同一个字符串内部。也就是说,我们可以交换 s1[i] 和 s2[j],但不能交换 s1[i] 和 s1[j]。最后,请你返回使 s1 和 s2 相同的最小交换次数,如果没有方法能够使得这两个字符串相同,则返回 -原创 2020-07-23 16:37:35 · 876 阅读 · 0 评论 -
坏了的计算器
LeetCode坏了的计算器在显示着数字的坏计算器上,我们可以执行以下两种操作:双倍(Double):将显示屏上的数字乘 2;递减(Decrement):将显示屏上的数字减 1 。最初,计算器显示数字 X。返回显示数字 Y 所需的最小操作数。示例1:输入:X = 2, Y = 3输出:2解释:先进行双倍运算,然后再进行递减运算 {2 -> 4 -> 3}.示例2:输入:X = 5, Y = 8输出:2解释:先递减,再双倍 {5 -> 4 -> 8}.原创 2020-07-23 15:25:34 · 251 阅读 · 0 评论 -
行相等的最少多米诺旋转--贪心算法
LeetCode行相等的最少多米诺旋转在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。)我们可以旋转第 i 张多米诺,使得 A[i] 和 B[i] 的值交换。返回能使 A 中所有值或者 B 中所有值都相同的最小旋转次数。如果无法做到,返回 -1.示例1:输入:A = [2,1,原创 2020-07-23 12:21:53 · 142 阅读 · 0 评论 -
最小差值Ⅱ--贪心
LeetCode最小差值 Ⅱ给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中。在此过程之后,我们得到一些数组 B。返回 B 的最大值和 B 的最小值之间可能存在的最小差值。示例 1:输入:A = [1], K = 0输出:0解释:B = [1]示例 2:输入:A = [0,10], K = 2输出:6解释:B =原创 2020-07-21 21:32:40 · 204 阅读 · 0 评论 -
换酒问题--贪心算法
LeetCode换酒问题小区便利店正在促销,用 numExchange 个空酒瓶可以兑换一瓶新酒。你购入了 numBottles 瓶酒。如果喝掉了酒瓶中的酒,那么酒瓶就会变成空的。请你计算 最多 能喝到多少瓶酒。示例1:输入:numBottles = 9, numExchange = 3输出:13解释:你可以用 3 个空酒瓶兑换 1 瓶酒。所以最多能喝到 9 + 3 + 1 = 13 瓶酒。示例2:输入:numBottles = 15, numExchange = 4输出:19原创 2020-07-21 17:47:18 · 499 阅读 · 0 评论