贪心算法之合并区间

news2024/11/26 14:38:37

“任世界多宽广,停泊在这港口~” 


        区间问题,涉及到最多的就是 取交集 和 并集的概念。我们使用C++排序算法后,其默认规则就是按照 “左排序”进行的。因而,我们实质上注意的是每一个区间的 右端点,根据题目要求,总结规律,指定出策略解决问题。

合并区间

(1) 题目解析 

(2) 算法原理  

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end());
        vector<vector<int>> res;
        int n = intervals.size();
        // 取左右端点
        int left = intervals[0][0],right = intervals[0][1];
        for(int i=1;i<n;++i)
        {
            int a = intervals[i][0],b = intervals[i][1];
            if(a <= right){
                // 有重合区间
                right = max(right,b);
            }
            else
            {
                // 更新
                res.push_back({left,right});
                left = a;
                right = b;
            }
        }
        // 最后一组 区间 也需要被插入
        res.push_back({left,right});
        return res;
    }
};

证明:

        因为,我们默认了排完序之后,所有的左端点,能合并的,都是连续的。所以,我们使用反证法设:左端点排完序后,不连续

        所以,我们按照左端点排完序后,一旦将区间合并,那么其一顶是连续的。

无重叠区间

(1) 题目解析

(2) 算法原理

class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end());
        int n = intervals.size();
        int ret = 0;
        int left = intervals[0][0],right = intervals[0][1];
        for(int i=1;i<n;++i){
            int a = intervals[i][0],b = intervals[i][1];
            if(a < right){
                // 存在重叠 保留小范围的
                ret++;
                right = min(right,b);
            }
            else{
                // 不存在重叠 新的开始
                right = b;
            }
        }
        return ret;
    }
};

证明:

        这样的贪心策略是否正确呢 ?我们假设贪心解是错误的。所以,我们会得到两份答案,一份是贪心解,一份是最有解:

⽤最少数量的箭引爆⽓球

(1) 题目解析

(2) 算法原理

 

class Solution {
public:
    int findMinArrowShots(vector<vector<int>>& points) {
        sort(points.begin(),points.end());
        int n = points.size();
        int left = points[0][0],right = points[0][1];
        int ret = 1; // 第一个区间就需要引爆
        for(int i=1;i<n;++i)
        {
            int a = points[i][0],b = points[i][1];
            if(a <= right)
            {
                // 重叠的 可以一支箭引爆
                right = min(right,b);
            }
            else
            {
                ret++; // 不是重叠 需要一支箭引爆
                right = b;
            }
        }
        return ret;
    }
};

        


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用Docker部署Drupal并结合cpolar实现固定公网地址访问

文章目录 前言1. Docker安装Drupal2. 本地局域网访问3 . Linux 安装cpolar4. 配置Drupal公网访问地址5. 公网远程访问Drupal6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。它的学习…

C++ Webserver从零开始:配置环境(九)——下载github的项目进行测试

前言 大家好&#xff0c;我又来更新Webserver的博客了。上一次更新这个专栏时2024.2.5号&#xff0c;离现在已经13天了。非常抱歉&#xff0c;中间隔了那么久。一方面是基础知识学完之后&#xff0c;就要开始自己写代码了。看基础知识和写代码是两回事&#xff0c;理论和实践的…

Python Selenium实现自动化测试及Chrome驱动使用

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 Selenium简介 安装Selenium库 编写自动化测试脚本 1 打开浏览器并访问网页 2 查找页面元…

如何低成本实现商场室内导航地图制作

商场地图导航可提升顾客服务体验&#xff0c;促进商场信息化建设。蜂鸟视图提供两种低成本的商场导航实现方式&#xff0c;以满足不同需求。 一、模拟导航 用户可选用“模拟导航”&#xff1a;将商场CAD图纸导入蜂鸟视图地图编辑器&#xff0c;通过简单操作生成室内3D地图&…

深入理解 Vue3 中的 setup 函数

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

迁移SVN和GIT的云端数据

在新服务器搭建GIT仓库 教程很多&#xff0c;大致的流程是&#xff1a; 1. 新建linux用户密码专用于git操作 2. 新建git库的存放文件夹并在此初始化git 3. 配置git库所在目录权限 *只需要有一个库和有一个用户&#xff0c;与在windows上建库是一样的。不需要搭建类似gitla…

一文彻底搞懂什么是类加载器

文章目录 1. 类加载器简介2. 类加载器的种类3. 类加载执行过程3.1 加载3.2 验证3.3 准备3.4 解析3.5 初始化3.6 使用3.7 卸载 1. 类加载器简介 类加载器&#xff08;Class Loader&#xff09;是 Java 虚拟机&#xff08;JVM&#xff09;的一部分&#xff0c;JVM只会运行二进制…

C语言------一种思路解决实际问题

1.比赛名次问题 ABCDE参加比赛&#xff0c;那么每个人的名次都有5种可能&#xff0c;即1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff1b; int main() {int a 0;int b 0;int c 0;int d 0;int e 0;for (a 1; a < 5; a){for (b 1; b < 5; b){for…

树和堆的精讲

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

(简易部署)恒创科技「幻兽帕鲁香港游戏服务器」搭建教程

近期&#xff0c;作为一款主打多人游戏模式的全新开放世界生存制作游戏——《幻兽帕鲁》(Palworld) &#xff0c;可谓“高效出圈”&#xff0c;自 2024 年 1 月 19 日在 Steam 平台发售抢先试玩版后&#xff0c;短短两个星期&#xff0c;幻兽帕鲁 steam 在线峰值已突破 200 万&…

23.java-日志框架

日志框架 介绍 : 程序中的日志可以用来记录程序运行过程中的信息&#xff0c;并可以进行永久存储。 生活中的日志&#xff1a; 生活中的日志就好比日记&#xff0c;可以记录你生活的点点滴滴。 引入 : 目前输出语句的弊端 : 信息只能展示在控制台不能将其记录到其他的位置&a…

Caddy 自动HTTPS 反向代理、重定向、静态页面 - docker版

简介 Caddy 是一个通用的、易于使用的 Web 服务器&#xff0c;具有以下特点&#xff1a; 快速: Caddy 使用 Go 语言编写&#xff0c;以高性能著称。 安全: Caddy 支持 HTTPS、自动证书生成、HTTP/2 等安全功能。 易用: Caddy 的配置文件简单易懂&#xff0c;易于配置。 功能丰…

代码随想录刷题笔记-Day19

1. 二叉搜索树的最小绝对差 530. 二叉搜索树的最小绝对差https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&#xff0c;其数值等于两值之差的绝…

Git基本操作(超详细)

文章目录 创建Git本地仓库配置Git配置命令查看是否配置成功重置配置 工作区、暂存区、版本库添加文件--场景一概述实例操作 查看.git文件添加文件--场景二修改文件版本回退撤销修改情况⼀&#xff1a;对于工作区的代码&#xff0c;还没有 add情况⼆&#xff1a;已经 add &#…

单片机和RTOS

一.单片机和RTOS区别 单片机是一种集成了处理器、内存、输入输出接口和外围设备控制器等功能的微型计算机系统。它通常用于控制简单的嵌入式系统&#xff0c;如家电、汽车电子、工业控制等。单片机具有低功耗、低成本和高可靠性等特点。 而RTOS&#xff08;Real-Time Operati…

HTTP 请求 400错误

问题 HTTP 请求 400错误 详细问题 客户端发送请求 public static UserInfo updateUserInfo(UserInfo userInfo) {// 创建 OkHttpClient 对象OkHttpClient client new OkHttpClient();// 创建请求体MediaType JSON MediaType.parse("application/json; charsetutf-8&…

DS:栈和队列的相互实现

创作不易&#xff0c;感谢友友们三连&#xff01;&#xff01; 一、前言 栈和队列的相互实现是用两个栈去实现队列或者是用两个队列去实现栈&#xff0c;这样其实是把问题复杂化的&#xff0c;实际中没有什么应用价值&#xff0c;但是通过他们的相互实现可以让我们更加深入地理…

快乐学Python,通过用户和订单的数据分析,制定营销策略【实战】

在互联网行业中&#xff0c;电子商务领域绝对是数据分析用途最多的地方&#xff0c;各大电商平台都依赖数据分析帮助其挖掘用户订单增长机会。比如某宝的随手买一件&#xff0c;核心思路也就是根据用户的日常浏览内容及停留时间&#xff0c;以及订单的关联度来进行推荐的。 本篇…

ssm在线学习平台-计算机毕业设计源码09650

目 录 摘要 1 绪论 1.1 选题背景及意义 1.2国内外现状分析 1.3论文结构与章节安排 2 在线学习平台系统分析 2.1 可行性分析 2.2 系统业务流程分析 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 在线学习平台总体设计 …

基于ant的图片上传组件封装(复制即可使用)

/*** 上传图片组件* param imgSize 图片大小限制* param data 上传数据* param disabled 是否禁用*/import React, { useState,useEffect } from react; import { Upload, Icon, message} from antd; const UploadImage ({imgSize 50,data { Directory: Image },disabled f…