当前位置: 首页 > news >正文

【练习】【贪心】力扣435. 无重叠区间

题目

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。

注意 只在一点上接触的区间是 不重叠的。例如 [1, 2] 和 [2, 3] 是不重叠的。

示例 1:

输入: intervals = [[1,2],[2,3],[3,4],[1,3]]

输出: 1

解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:

输入: intervals = [ [1,2], [1,2], [1,2] ]

输出: 2

解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

输入: intervals = [ [1,2], [2,3] ]

输出: 0

解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

来源:力扣435. 无重叠区间


思路(注意事项)

先按照区间的右端点升序排序,然后给定一个划分重叠区间的分界点,当没有重叠时更新,且让无重叠区间数加一。

  • 按照右端点升序排序是为了给后续区间留下更多的空间。

纯代码

class Solution {
private:
    static bool cmp (const vector<int>& a, const vector<int>&b)
    {
        return a[1] < b[1];
    }
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort (intervals.begin(), intervals.end(), cmp);
        int end = intervals[0][1], num = 1;

        for (int i = 1; i < intervals.size(); i ++)
        {
            if (intervals[i][0] >= end)
            {
                num ++;
                end = intervals[i][1];
            }
        }
        return intervals.size() - num;
    }
};

题解(加注释)

class Solution {
private:
    // 自定义排序规则:按区间的结束时间升序排序
    static bool cmp(const vector<int>& a, const vector<int>& b)
    {
        return a[1] < b[1]; // 比较两个区间的结束时间
    }

public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        // 按区间的结束时间升序排序
        sort(intervals.begin(), intervals.end(), cmp);

        // end 记录当前选中区间的结束时间
        int end = intervals[0][1];
        // num 记录选中的区间数量,初始为 1(第一个区间)
        int num = 1;

        // 遍历排序后的区间
        for (int i = 1; i < intervals.size(); i ++)
        {
            // 如果当前区间的开始时间大于等于 end,说明不重叠
            if (intervals[i][0] >= end)
            {
                num ++; // 选中当前区间
                end = intervals[i][1]; // 更新 end 为当前区间的结束时间
            }
        }

        // 需要移除的区间数量 = 总区间数量 - 选中的区间数量
        return intervals.size() - num;
    }
};

相关文章:

  • TEE可信执行环境的安全业务保护方案
  • 前端水印实现方式
  • Windows 图形显示驱动开发-WDDM 3.2-脏位跟踪
  • 在剪映中给英文学习视频添加中文字幕
  • 微前端开发模式解析与实践
  • React高级内容探索
  • 夸父工具箱(安卓版) 手机超强工具箱
  • XAUI 详解
  • 自然语言处理:朴素贝叶斯
  • 用Babel脚本实现多语言/国际化
  • Ubuntu更改内核
  • 【AI】Ollama+OpenWebUI+llama3本地部署保姆级教程,没有连接互联网一样可以使用AI大模型!!!
  • ARM架构与编程(基于STM32F103)ARM单片机启动流程与MAP文件解析
  • RabbitMQ——消息发送的双重保障机制
  • Java【多线程】(2)线程属性与线程安全
  • vue2+ele-ui实践
  • Python的循环和条件判断 笔记250303
  • Spring Security简介与使用
  • 大模型辅助火狐浏览器插件开发:网页保存至本地及 GitHub 仓库
  • UNION 和 UNION ALL 的区别:深入解析 SQL 中的合并操作
  • 网站开发文档模板下载/网站怎么做出来的
  • 新品发布会方案/优化教程网
  • 在什么网站上查建设机械操作证/站长之家域名查询
  • 报名网站建设费用价格/市场营销策划公司排名
  • 怎么查什么时候做的网站/做网站设计的公司
  • 网站建设销售技巧/今日小说排行榜百度搜索风云榜