贪心算法
文章平均质量分 79
章明狼
IT入门手残学生党一枚、Typora忠实爱好者
展开
-
C++/Python 【哈希/贪心】K次翻转完成多米诺骨牌全相等
行相等的最少多米诺旋转题目[leetcode1007]在一排多米诺骨牌中,A[i] 和 B[i] 分别代表第 i 个多米诺骨牌的上半部分和下半部分。(一个多米诺是两个从 1 到 6 的数字同列平铺形成的 —— 该平铺的每一半上都有一个数字。)我们可以旋转第 i 张多米诺,使得 A[i] 和 B[i] 的值交换。返回能使 A 中所有值或者 B 中所有值都相同的最小旋转次数。如果无法做到,返回 -1.示例 1:输入:A = [2,1,2,4,2,2], B = [5,2,6,2,3,2]输出:原创 2021-01-16 14:54:48 · 357 阅读 · 0 评论 -
C++【贪心+最大堆】加最少次数的油,跑出最远距离的车
最优加油方法题目[leetcode871]汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。沿途有加油站,每个 station[i] 代表一个加油站,它位于出发位置东面 station[i][0] 英里处,并且有 station[i][1] 升汽油。假设汽车油箱的容量是无限的,其中最初有 startFuel 升燃料。它每行驶 1 英里就会用掉 1 升汽油。当汽车到达加油站时,它可能停下来加油,将所有汽油从加油站转移到汽车中。为了到达目的地,汽车所必要的最低加油次数是多少?原创 2020-08-13 19:27:42 · 869 阅读 · 0 评论 -
C++ 【贪心】如何用最少的箭射爆全部气球
射击气球题目[leetcode452]在二维空间中有许多球形的气球。对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标。由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了。开始坐标总是小于结束坐标。平面内最多存在104个气球。一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被引爆。可以射出的弓箭的数量没有限制。 弓箭一旦被射出之后原创 2020-08-13 16:02:47 · 729 阅读 · 0 评论 -
C++ 【贪心】跳跃游戏Ⅱ 如何用最少的次数实现跳跃至最远的位置
跳跃游戏(进阶版)题目[leetcode45]给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。思路因为数组是一定能够到达最后一个位置的,所以还是运用跳跃游戏Ⅰ里原创 2020-08-13 10:20:54 · 656 阅读 · 0 评论 -
C++【贪心】跳跃游戏Ⅰ
跳跃游戏题目[leetcode55]给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到原创 2020-08-13 09:54:49 · 213 阅读 · 0 评论 -
C++ 【贪心】以栈优化的形式移除K个数字后最小
移除K个数字题目已知一个使用字符串表示的非负整数num,将num中的K个数字移除,求移除K个数字后,可以获得的最小的可能的新数字。例如:输入:num = “1432219”,k = 3在去除3个数字后得到的很多可能里,如1432、4322、2219、1219、1229…;其中以去掉数字4、3、2得到的1219最小!思路因为越高位的数字决定的大小比低位更有效,所以如果要最小的数字,需要尽可能让新数字优先最高位最小,次高位最小,次次高位最小…最终直到移除够K个数字建立一个数字字符栈,从字符串开头原创 2020-08-11 17:51:46 · 517 阅读 · 0 评论 -
C++ 【贪心】求摇摆序列的最长长度
摇摆序列题目一个整数序列,如果两个相邻元素的差恰好正负(负正),交替出现,则该序列被称为摇摆序列。一个小于2个元素的序列直接为摇摆序列。例如:序列[1, 7,4, 9, 2, 5],相邻元素的差(6,-3,5,-7,3),该序列为摇摆序列。序列[1 ,4,7,2,5] [7,4,5,5]不是摇摆序列。给一个随机序列,求这个序列满足摇摆序列定义的最长子序列的长度。例如:输入[1,7,4,9,2,5],结果为6;输入[1,17,5,10,13,15,10,5,16,8], 结果为7([1,17原创 2020-08-11 10:41:53 · 595 阅读 · 0 评论 -
C++ 【贪心】如何用一定量的糖果满足最多的孩子
分糖果题目已知一些孩子和一些糖果,每个孩子有需求因子g,每个糖果有大小s,当某个糖果的大小s大于等于某个孩子的需求因子g时,代表该糖果可以满足该孩子;求使用这些糖果,最多能满足多少孩子?(注意,某个孩子最多只能用1个糖果满足)例如,需求因子数组g=[5,10,2,9,15,9];糖果大小s=[6,1,20,3,8];最多可以满足3个孩子。思路为了更明显的判断某个孩子能够被那个糖果满足,需要对g,s进行排序后观察。提出以下三个问题:①是否直接暴力枚举,尝试每个糖果是否能满足某个孩子?②如果某个原创 2020-08-11 09:30:26 · 397 阅读 · 0 评论