Leetcode 贪心算法(四)

贪心算法 C++ 实战:从 LeetCode 455 分发饼干到 435 无重叠区间 本文深入探讨了贪心算法在C++中的实战应用,通过LeetCode 455分发饼干和435无重叠区间两个经典问题,详细解析了贪心算法的核心思想、策略设计和高效实现。文章不仅提供了清晰的C++代码示例和复杂度分析,还总结了贪心算法的通用解题框架和常见应用场景,帮助开发者掌握这一高效的问题解决策略。 阅读详情

452. 用最少数量的箭引爆气球

力扣题目链接

class Solution {
public:
    static bool cmp(const vector<int> a, const vector<int>& b){
        return a[0] < b[0];
    }
    int findMinArrowShots(vector<vector<int>>& points) {
        if(points.size() == 0)  return 0;
        sort(points.begin(), points.end(), cmp);
        int result = 1;
        for(int i = 1; i < points.size(); i++){
            if(points[i][0] > points[i - 1][1]){
                result++;
            }
            else{
                points[i][1] = min(points[i - 1][1], points[i][1]);
            }
        }      
    return result;
    }
};

435. 无重叠区间

力扣题目链接

class Solution {
public:
    static bool cmp(vector<int>& a, vector<int>& b){
        return a[1] < b [1];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        if(intervals.size() == 0)  return 0;
        sort(intervals.begin(), intervals.end(), cmp);
        int count = 1;
        int end = intervals[0][1];
        for(int i = 1; i < intervals.size(); i++){
            if(end <= intervals[i][0]){
                end = intervals[i][1];
                count++;
            }
        }
        return intervals.size() - count;
    }
};

763. 划分字母区间

力扣题目链接

class Solution {
public:
    vector<int> partitionLabels(string s) {
        int hash[27] = {0};
        for(int i = 0; i < s.size(); i++){
            hash[s[i] - 'a'] = i;
        } 
        vector<int> result;
        int left = 0;
        int right = 0;
        for(int i = 0; i < s.size(); i++){
            right = max(right, hash[s[i] - 'a']);
            if(i == right){
                result.push_back(right - left + 1);
                left = i + 1;
            }
        }
        return result;
    }
};

56. 合并区间

力扣题目链接

class Solution {
public:
    static bool cmp(const vector<int>& a, const vector<int>& b){
        return a[0] < b[0];
    }
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        vector<vector<int>> result;
        if(intervals.size() == 0)   return result;
        sort(intervals.begin(), intervals.end(), cmp);
        bool flag = false;
        for(int i = 1; i < intervals.size(); i++){
            int start = intervals[i - 1][0];
            int end = intervals[i - 1][1];
            while(i < intervals.size() && intervals[i][0] <= end){
                end = max(end, intervals[i][1]);
                if(i == intervals.size() - 1)   flag = true;
                i++;
            }
            result.push_back({start,end});
        }
        if(flag == false){
            result.push_back({intervals[intervals.size() - 1][0], intervals[intervals.size() - 1][1]});
        }
        return result;
    }
};
平方和定理 leetcode279 c++ 给定正整数n,找到若干个完全平方数(比如1, 4, 9, 16, ...)使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 很多人第一眼看到这个问题,想到的第一种做法就是使用贪心算法,但是对于这个问... 阅读详情

相关推荐

行人重识别(ReID)基础知识入门

行人重识别(Person re-identification)主要目的是针对出现在监控摄像头内的某个目标行人,准确快速地从监控网络其他摄像头内的大量行人中将这个目标行人标识出来。如图所示一个区域有多个摄像头拍摄视频序列,ReID的要求对一个摄像头下感兴趣的行人,检索到该行人在其他摄像头下出现的所有图片。

用于记录 1万+

LeetCode:区间相关题目

class Solution { public: vector<vector<int>> merge(vector<vector<int>>& intervals) { vector<vector<int>> ret; if (intervals.empty()) ...

weixin_43462819的博客 259

Tessent --- PDL

当关联的ICL模块是当前ICL顶部模块时,即当它与当前设计匹配时,只能iCall一个iTopProc。但是,可以在iTopProc内调用iCall iProc或iTopProc。为指定后续iProc命令引用的ICL模块,发出这个命令之后,随后定义的iProc都会对应的ICL模块进行定义。为后续iCall调用,当使用iCall命令调用该过程时,参数列表中的变量将被替换为iCall命令中指定的值。在调用iProc时,运行iProc内的命令。PDL是面向工程师的,工程师利用PDL语言,对ICL中的单元进行控制。

qiantianyiqian的博客 2677

[](vector<int> a, vector<int> b) { return a[1] < b[1];}

今天在看Leetcode算法书的时候看到一个函数,不是很理解,在这里记录一下。 sort(intervals.begin(), intervals.end(), [](vector<int> a, vector<int> b) { return a[1] < b[1]; }); 这里的interval是一个二维的向量。开始对[](vector a, vector b){…}不是很了解,取网上查了下资料。 了解到"[]"是表示Lambda函数用

m0_46598793的博客 1108

leetcode452之番外

代码: class Solution { public: static bool cmp(vector<int>&a,vector<int>&b) { return a[0]<b[0]; } int findMinArrowShots(vector<vector<int>>& points) { if(points.size()==0)return 0;

qq_57328462的博客 267

C++中vector使用详细说明 ()

转自:http://blog.chinaunix.net/uid-26000296-id-3785610.html http://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html 一、向量的介绍 向量vector是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于...

weixin_30521161的博客 4758

LeetCode】56.合并区间

文章目录问题描述排序,遍历,各个合并(我自己写的)标答代码 问题描述 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

未来科学研究所 179

LeetCode刷题日记之贪心算法

在前几篇文章中,我们已经覆盖了贪心算法的基本思路和多种题型。这次我将继续分享几道具有挑战性的贪心题目。希望这篇文章能为大家带来更多解题灵感和技巧✍✍✍

粥的博客 1032

LeetCode从入门到超凡()深入浅出理解贪心算法

贪心算法是一种经典的算法策略,广泛应用于解决最优化问题。在许多情况下,贪心算法能够以简单且高效的方式解决复杂问题。因此,掌握贪心算法对开发人员和算法爱好者来说非常重要。本文旨在帮助读者深入理解贪心算法的工作原理、特征、正确性证明及其实际应用,并通过多个实例的分析和Python代码实现来巩固理解。贪心算法是一种在每一步选择中都采取当前状态下最优或最有利的选择,从而期望通过局部最优解最终得到全局最优解的算法。

极限突破者的博客 1170

LeetCode题解——贪心算法

122. 买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格...

wardseptember的博客 671

Offer必备算法38_贪心算法_八道力扣题详解(由易到难)

Offer必备算法38_贪心算法_八道力扣题详解(①力扣56. 合并区间+②力扣435. 无重叠区间+③力扣452. 用最少数量的箭引爆气球+④力扣397. 整数替换+⑤力扣354. 俄罗斯套娃信封问题+⑥力扣1262. 可被三整除的最大和+⑦力扣1054. 距离相等的条形码+⑧力扣767. 重构字符串)

参考书籍:《C语言程序设计》《数据结构》《C++ Primer》《Effective C++》《STL源码剖析》《现代操作系统》《UNIX环境高级编程》《图解TCP/IP》《图解HTTP》《Linux高性能服务器编程》《剑指Offer》《算法导论》 1413

算法沉淀——贪心算法leetcode真题剖析)

首先我们想到如果某个字符出现偶数次,那么它一定可以构成回文串,所以我们利用这个思想将所有字符的偶数个都计入回文串的个数中,若该个数不超过给出的字符串长度,那么我们可以再加上任意字符,即为最长的回文字符串。我们可以通过例子发现,前两个位置的数无法被改变,在这道题中,为了让结果最大,我们应将第二个位置之后的数都变成分子,所以我们只需要将括号加在第二位至最后一位即可得出最大数。时,为了让上升的数有更多选择空间,我们可以选择当前可选择最小的那个数,反之,选择最大的数。,这是能让孩子们满足胃口的饼干的最小尺寸;

立志做一个高产且细节博主 1635

leetcode」本周小结!(贪心算法系列

> 每周一总结,算法轻松学!

代码随想录 489

总结 贪心算法_「leetcode」本周小结!(贪心算法系列

本文 https://github.com/youngyangyang04/leetcode-master 已经收录,里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图,可以fork到自己仓库,有空看一看一定会有所收获,如果对你有帮助也给一个star支持一下吧!周一在贪心算法:用最少数量的箭引爆气球中,我们开始讲解了重叠区间问题,用最少的弓箭射爆所有气球,其本质就是找到最大的重...

weixin_29617841的博客 80

安排电影院座位--贪心算法

LeetCode 安排电影院座位 如上图所示,电影院的观影厅中有 n 行座位,行编号从 1 到 n ,且每一行内总共有 10 个座位,列编号从 1 到 10 。 给你数组 reservedSeats ,包含所有已经被预约了的座位。比如说,researvedSeats[i]=[3,8] ,它表示第 3 行第 8 个座位被预约了。 请你返回 最多能安排多少个 4 人家庭 。4 人家庭要占据 同一行内连续 的 4 个座位。隔着过道的座位(比方说 [3,3] 和 [3,4])不是连续的座位,但是如果你可以将 4

jump_into_zehe的博客 9009

初学python的我开始Leetcode题-14

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优(即最有利)的决策,从而希望导致全局最优解的算法策略。它不从整体最优上考虑,而是通过局部最优选择的叠加来构建解决方案,因此效率较高但可能无法保证全局最优性。在学习过程中,当未知最优算法时,可以先使用贪心——也可以称为贪婪算法。提示:以下是本篇文章正文内容,下面结果代码仅供参考针对贪心算法种题型进行了学习,了解了部分有关贪心算法与python的相关知识,大家加油!

2301_79903353的博客 776

leetcode 279 完全平方数(Perfect Squares) python BFS,平方定理

所有Leetcode题目不定期汇总在 Github, 欢迎大家批评指正,讨论交流。 ''' Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n. Example 1: Input: n = 12 ...

Jasmine_dream 1702

LeetCode笔记:Biweekly Contest 43 比赛记录

LeetCode笔记:Biweekly Contest 43 0. 赛后总结 1. 题目一 1. 解题思路 2. 代码实现 2. 题目二 1. 解题思路 2. 代码实现 3. 题目三 1. 解题思路 2. 代码实现 4. 题目 1. 解题思路 2. 代码实现 3. 算法优化 0. 赛后总结 这一次的比赛整体上还算是顺利吧,虽然也只做出了三题,还错了两次,不过比较前两周的成绩,呵呵,总也算是一个比较开心的事了吧。。。 不过这次终究还算是运气好,大约是最后一题比较难的缘故..

codename_cys的博客 345

LeetCode知识点总结 - 1386

LeetCode 1386. Cinema Seat Allocation

m0_59773145的博客 559

力扣 LeetCode 完全平方数 C++实现

力扣 LeetCode 完全平方数 C++实现 题目 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。 示例: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 解决方法 此前不知道有一个“平方数和定理”,如果应用该定...

weixin_42369779的博客 516

课程管理和课程资源开发ppt.ZIP

课程管理和课程资源开发ppt.ZIP

上一篇: Leetcode 贪心算法(三)
Vickyaa.w
博客等级 码龄6年 1粉丝 38原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值