![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
贪心
algsup
这个作者很懒,什么都没留下…
展开
-
[贪心]leetcode1144:递减元素使数组呈锯齿状(medium)
【代码】[贪心]leetcode1144:递减元素使数组呈锯齿状(medium)原创 2023-02-27 19:45:13 · 231 阅读 · 0 评论 -
[贪心]leetcode2457:美丽整数的最小增量(medium)
【代码】[贪心]leetcode2457:美丽整数的最小增量(medium)原创 2022-11-06 14:43:07 · 359 阅读 · 0 评论 -
[贪心:最坏情况下的最少消耗]leetcode2412:完成所有交易的初始最少钱数(hard)
思路:贪心 + 一次遍历。原创 2022-09-23 21:28:37 · 457 阅读 · 0 评论 -
[贪心-区间分组][差分数组]leetcode2406. 将区间分为最少组数(medium)
【代码】[贪心-区间分组][差分数组]leetcode2406. 将区间分为最少组数(medium)原创 2022-09-12 20:13:04 · 279 阅读 · 0 评论 -
[贪心][数学]leetcode6144:将数组排序的最少替换次数(hard)
代码】[贪心][数学]leetcode6144:将数组排序的最少替换次数(hard)原创 2022-08-08 18:38:07 · 317 阅读 · 0 评论 -
[贪心]leetcode1953:你可以工作的最大周数(medium)
代码】[贪心]leetcode1953你可以工作的最大周数(medium)原创 2022-07-25 23:20:33 · 156 阅读 · 0 评论 -
[贪心]leetcode1247:交换字符使得字符串相同(medium)
代码】[贪心]leetcode1247交换字符使得字符串相同(medium)原创 2022-07-25 20:46:28 · 186 阅读 · 0 评论 -
[区间贪心]leetcode757:设置交集大小至少为2(hard)
代码】[区间贪心]leetcode757设置交集大小至少为2(hard)原创 2022-07-22 15:24:46 · 158 阅读 · 0 评论 -
[贪心+优先队列]leetcode871:最低加油次数(hard)
题目:题解:代码如下:原创 2022-07-02 09:31:50 · 322 阅读 · 0 评论 -
[区间合并]leetcode57:插入区间(medium)
题目:题解:思路1:直接将新区间 b 添加到区间 a 中,然后调用56. 合并区间的代码即可。这样的时间复杂度是O(n∗logn)O(n*logn)O(n∗logn)的,可以使用思路2中线性插入。思路2:线性查找插入区间点,进行插入。时间复杂度O(n)O(n)O(n)。代码如下:// 思路1代码class Solution {public: vector<vector<int>> insert(vector<vector<int>&原创 2022-04-19 21:53:29 · 170 阅读 · 0 评论 -
[区间贪心]leetcode56:合并区间(medium)
题目:题目:排序先对数组元素进行排序,然后首元素添加到result中,每次将result的尾元素与原数组元素进行比较,若尾元素的右边界大于数组元素的左边界,则根据这两点的右边界来合并成新的区间;否则就不合并区间,直接将该区间添加到result中。代码如下:class Solution {public: //题解1:暴力法,先对数组元素进行排序,然后首元素添加到resu...原创 2019-12-13 20:31:55 · 211 阅读 · 0 评论 -
[根据下标排序+贪心]leetcode2136:全部开花的最早一天(hard)
题目:题解:思路:贪心代码如下:class Solution {public: int earliestFullBloom(vector<int>& plantTime, vector<int>& growTime) { vector<int> id(growTime.size()); // 用id存的是growTime的下标,用来给growTime排序的下标值 iota(id原创 2022-02-20 19:39:43 · 597 阅读 · 0 评论 -
[贪心]leetcode1405:最长快乐字符串(medium)
题目:题解:思路:贪心1)由于题目要求最长快乐字符串,要想快乐字符串尽可能地长的话,就要尽可能地选择字符数量最多的字符,这样我们最长的优美字符串构造完成后,最后剩下的一定是一种字符且该字符的数量最多。2)分析出以上思路后,接下来尝试编码了。将<字母数量,该字母本身>装入 vector,然后按照字母数量进行由大到小的排序,然后每次选择数量最多的字符,当然也要该字符不能三个连续地在一起,当出现三个相同的字符在一起时,选择下一个字符。也就是说我们每次都是在数量最多的字符和次最多的字符中原创 2022-02-07 12:22:24 · 494 阅读 · 0 评论 -
[贪心]leetcode1414:和为 K 的最少斐波那契数字数目(medium)
题目:题解:思路:贪心,难点在于贪心的证明。1)当前选取的斐波那契数字数目最少时,不可能选取两个相邻的斐波那契数。2)一定存在一种选取斐波那契数数字数目更少的方案数,使得选取的每个斐波那契数字各不相同。综上所述,无论 mm 是奇数还是偶数,都需要选取 Fm,即不超过 k的最大斐波那契数字,才能使得选取的斐波那契数字满足和为 k 且数目最少。代码如下:class Solution {public: // 思路:贪心地选择不超过k的最大fib数字 int findMi原创 2022-02-03 15:34:14 · 520 阅读 · 0 评论 -
[贪心]leetcode1764:通过连接另一个数组的子数组得到一个数组(medium)
题目:题解:贪心法,思路看代码即可。代码如下:class Solution {public: // 贪心:每次匹配 groups 中单个数组在 nums 中的最前位置 // 时间复杂度最大为O(n^2),空间复杂度O(1) bool canChoose(vector<vector<int>>& groups, vector<int>& nums) { int i=0,j=0,n=nums.s原创 2021-02-21 23:24:59 · 183 阅读 · 0 评论 -
[贪心][字符串]leetcode1717:删除子字符串的最大得分(medium)
题目:题解:考试时不会做,看题解学会的。思路:贪心法遍历字符串,优先使用 max(x,y),因为只要 x>=y,那么我们取 ab 肯定是可以的,因为我们每取一个 ab,该字符串剩余的部分就会链接在一起,那么我们又可以使用 ab 了,所以出现 ab 时,我们将统计到的 a b 的个数 -1 即可。对于该字符串我们将非 a b 的字符将字符串分成一段段的 abbaba 串,每次被截断的时候,再来更新剩余的 ab 或 ba 个数,此时的个数为 min(a,b),因为 1a 1b 就可以构原创 2021-02-20 19:43:57 · 275 阅读 · 0 评论 -
[贪心][字符串]leetcode1754:构造字典序最大的合并字符串(medium)
题目:题解:贪心法:每次比较两个字符串的字典序,从字典序较大的字符串中选一个字符,插入res。关于贪心的证明法,可以看看y总是怎么做的。LeetCode第227场周赛20mim-30min。代码如下:class Solution {public: // 题解:贪心法 // 每次比较两个字符串的字典序,从字典序较大的字符串中选一个字符 string largestMerge(string s, string t) { int i=0,j=0;原创 2021-02-08 16:41:48 · 280 阅读 · 0 评论 -
[贪心][找规律]1753:移除石子的最大得分(medium)
题目:题解:贪心法,思路在代码里面。代码如下:class Solution {public: // 贪心猜想:假设a<=b<=c // 1)a+b<c,那么a+b必定可以消耗完,剩余c里面还有多余的,a+b为拿走的最多石子了 // 2)a+b>=c,那么我们每次选2个最大的进行拿走,即先消耗c和b,然后等c消耗和a差不多大时,在消耗c和a,最后柱子中只会剩下1个或0个 // a+b+c 为奇数,则最后还剩下一个;为偶数时,则最后柱原创 2021-02-07 22:45:20 · 301 阅读 · 0 评论 -
[贪心法+回溯法][完全背包]leetcode322:零钱兑换(medium)
题目:题解:贪心+回溯贪心:将零钱由大到小排序,便于首先选择面值较大的零钱回溯:若某个零钱选择之后,它后面的小零钱不能完成兑换的话,我们需要回溯,也就是将面值较大的零钱减少一张加速 or 剪枝:每次直接将面值大的零钱选用最大张数,加速零钱兑换;若可兑换的零钱数大于 res 了,那么我们应该剪枝,也就是将将面值较大的零钱减少一张。代码如下:class Solution {p...原创 2020-03-08 22:59:34 · 1385 阅读 · 0 评论 -
[贪心法]leetcode376:摆动序列(medium)
题目:题解:贪心法, 贪心的正确性:可想成求波峰和波谷的个数,就可得证了。代码实现:主要使用 flag 来表示前面元素的符号,flag 为 -1 表示前面两个元素的差值为负号,那么此时我们只有nums[i]>nums[i-1]找到正号,才能使序列变长。换句话说前面是波谷,我们需要找到转折点,才能到达波峰,贪心法得证。flag 为 1 表示前面两个元素的差值为正号,那么此时我们只有...原创 2020-03-05 10:17:32 · 383 阅读 · 0 评论 -
[dp][区间贪心]leetcode646:最长数对链(medium)
题目:题解:C++:动态规划 || 二分法 || 贪心法(一题多解,由子题想到母题)代码如下:class Solution {public: //题解1:动态规划,时间复杂度O(n^2),空间复杂度O(n) //思路与354. 俄罗斯套娃的题一模一样,就是题目背景换了,哈哈伪装者 int findLongestChain_1(vector<vect...原创 2020-01-28 21:07:47 · 235 阅读 · 0 评论 -
[贪心]leetcode1111:有效括号的嵌套深度(medium)
题目:题解:代码如下:class Solution {public: //思路:将原字符串的深度一半给A,一半给B,这样深度就最小了。如果有一层的括号很多,放同一个子序列也没有影响 //具体实现:深度为奇数的放一个子序列,深度为偶数放另一个子序列 vector<int> maxDepthAfterSplit(string seq) { ...原创 2020-01-23 21:31:45 · 382 阅读 · 0 评论 -
[贪心法]leetcode1326:灌溉花园的最少水龙头数目(hard)
题目:5318. 灌溉花园的最少水龙头数目题解:贪心法1:首先遍历rangs,建立45. 跳跃游戏 Ⅱ中的跳跃数组,left表示起始点,right-left表示最大跳跃距离2:使用跳跃游戏Ⅱ中的代码即可,不过每次到达边界end,需判断furthest是否超过end代码如下:class Solution {public: //题解:贪心法 //1:首先遍历...原创 2020-01-19 22:04:21 · 631 阅读 · 0 评论 -
[区间贪心]leetcode452:用最少数量的箭引爆气球(medium)
的算法思路一模一样,不过是将边界的原创 2019-12-17 19:54:05 · 180 阅读 · 0 评论 -
[区间贪心]leetcode435:无重复区间(medium)
题目:题解:区间贪心本题是经典的区间贪心题,在晴神的《算法笔记》中有学习过,所以本题也就会做了。思路:将先进行排序,将区间的左端点先按由小到大排序;相同的左端点,按右端点由小到大排序。注意题目条件:可以认为区间的终点总是大于它的起点。,所以关于排序问题大家不要想太多,就是我第一句话说的那样。然后进行贪心算法,首先我们先选第一个区间的右端点作为边界值,直到某个区间的左端点大于等于边界...原创 2019-12-17 19:40:17 · 716 阅读 · 3 评论 -
[贪心]leetcode670:最大交换(medium)
题目:题解:贪心法将数字转换为字符串,然后由前向后遍历,寻找比下标i数字大的最大的数字下标index,然后交换这两个下标所对应的数字就得到最后的结果了。代码如下:class Solution {public: //思路:将数字转换为字符串,然后由前向后遍历,寻找比下标i数字大的最大的数字下标index,然后交换这两个下标所对应的数字就得到最后的结果了 int ...原创 2019-12-12 00:01:05 · 202 阅读 · 0 评论 -
[贪心法]leetcode738:单调递增的数字(medium)
题目:题解:贪心算法,遍历数字每一位,当前位的数字比下一位的数字大,则将该位数字减小1,然后之后位的数字全部变为9。代码如下:class Solution {public: //题解:贪心算法,遍历数字每一位,当前位的数字比下一位的数字大,则将该位数字减小1,然后之后位的数字全部变为9 int monotoneIncreasingDigits(int N) { ...原创 2019-12-10 16:47:27 · 423 阅读 · 0 评论 -
[单调栈][贪心]leetcode402:移掉K位数字(medium)
题目:题解:单调栈,维持一个递增栈,当前元素小于栈顶元素,则移除栈顶元素思想:贪心思想,较小的元素在栈的底部,优先从最高位开始考虑代码如下:class Solution {public: //题解:单调栈,维持一个递增栈,当前元素小于栈顶元素,则移除栈顶元素 //思想:贪心思想,较小的元素在栈的底部 //递增栈:栈的元素从栈底到栈顶是递增的 s...原创 2019-12-10 15:34:23 · 248 阅读 · 0 评论 -
[数学][贪心]leetcode12:整数转罗马数字(medium)
题目:12.整数转罗马数字题解:解法1:贪心法题解2:暴力法代码如下:class Solution {public: //解法1:贪心法 string intToRoman_1(int num) { int values[]={1000,900,500,400,100,90,50,40,10,9,5,4,1}; ...原创 2019-11-19 15:39:17 · 221 阅读 · 0 评论 -
[贪心]leetcode135:分发糖果(hard)
题目:题解:贪心法题解1:我们先找从左到右满足最少的糖果,再找从右到左的,最后取两边都满足的值(就是最大值)。代码如下:class Solution {public: int candy(vector<int>& ratings) { int n=ratings.size(); vector<int> ...原创 2019-11-17 22:38:04 · 225 阅读 · 0 评论 -
[贪心]leetcode134:加油站(medium)
题目:134.加油站题解:本题与53.最大子序列区别是:这题需要求的是最大子串的起始位置。代码几乎没有区别,只需要记录一下起始角标。代码如下:class Solution {public: int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { /...原创 2019-11-17 21:28:17 · 190 阅读 · 0 评论 -
[贪心]leetcode122:买卖股票的最佳时机 Ⅱ (easy)
题目:122.买卖股票的最佳时机 Ⅱ题解:贪心策略:①单独交易日: 设今天价格p1、明天价格 p2,今日买入与明天卖出之间的收益为p2-p1(也可为负数)。②连续上涨日:连续上涨日的收益为pn-p1=(pn-pn-1)+(pn-1-pn-2)+...+(p2-p1),所以连续上涨日的收益可看作每天都有收益,也就是天天都在卖股票赚钱。③连续下降交易日: 则不买卖收益最大,即不会亏...原创 2019-11-14 23:10:36 · 152 阅读 · 0 评论 -
[贪心]leetcode45:跳跃游戏 Ⅱ(hard)
题目:题解:本题主要使用了贪心的策略,我们每次在可跳范围内选择可以使得跳的更远的位置。比如[2,3,1,1,4],元素2可跳范围为[3,1],那么我们的下一次起跳必须在选择元素3的可跳范围[1,1,4](因为可跳的距离最远),这样我们跳两次就能跳到最后一个位置了。写代码的话,我们用 end 表示当前能跳的边界,在遍历数组的时候,到了边界,我们就重新更新新的边界。具体可参考:大佬的解法...原创 2019-11-14 22:53:15 · 250 阅读 · 0 评论 -
[贪心]leetcode55:跳跃游戏(medium)
题目:题解:贪心法思路一:对每一个能作为起跳点的格子都尝试跳一次,把能跳到最远的距离不断更新。比如[3,2,1,0,4]:第一个作为起跳点的格子可以跳跃的距离是3,那么表示后面 3 个格子[2,1,0]都可以作为起跳点;对于可以作为起跳点的格子[2,1,0]都尝试跳一次,并把能跳到最远的距离不断更新;如果可以一直跳到最后,就成功了(然而本例中格子最多跳到[0]这个格子)。思路...原创 2019-11-13 22:24:04 · 204 阅读 · 0 评论