力扣 435. 无重叠区间

这篇具有很好参考价值的文章主要介绍了力扣 435. 无重叠区间。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目来源:https://leetcode.cn/problems/non-overlapping-intervals/description/

力扣 435. 无重叠区间,开始C++吧,leetcode,算法,c++,贪心算法

力扣 435. 无重叠区间,开始C++吧,leetcode,算法,c++,贪心算法C++题解1:对区间进行排序,根据区间的末端进行排序,小的在前,大的在后;由于有重复区间,我们拿后面的区间去看是否跟前面的区间重合,如果后面区间的前端大于前面区间的后端,则说明重合;但在排序会遇到末端平齐的,哪个在前呢?当然是前端更小的在前,因为前端更小就说明它更长,在与前面的区间比较时,可以把它跳过(res++)。

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

 C++题解2(来源代码随想录):根据右区间进行排序,找到不交叉的区间,用总数减去不交叉的区间得到去重数。

class Solution {
public:
    // 按照区间右边界排序
    static bool cmp (const vector<int>& a, const 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;
    }
};

C++题解3(来源代码随想录):根据左区间进行排序,直接计算重复区间。文章来源地址https://www.toymoban.com/news/detail-607695.html

class Solution {
public:
    static bool cmp (const vector<int>& a, const vector<int>& b) {
        return a[0] < b[0]; // 改为左边界排序
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        if (intervals.size() == 0) return 0;
        sort(intervals.begin(), intervals.end(), cmp);
        int count = 0; // 注意这里从0开始,因为是记录重叠区间
        int end = intervals[0][1]; // 记录区间分割点
        for (int i = 1; i < intervals.size(); i++) {   
            if (intervals[i][0] >= end)  end = intervals[i][1]; // 无重叠的情况
            else { // 重叠情况 
                end = min(end, intervals[i][1]);
                count++;
            }
        }
        return count;
    }
};

到了这里,关于力扣 435. 无重叠区间的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 力扣 435. 无重叠区间

    题目来源:https://leetcode.cn/problems/non-overlapping-intervals/description/ C++题解1:对区间进行排序,根据区间的末端进行排序,小的在前,大的在后;由于有重复区间,我们拿后面的区间去看是否跟前面的区间重合,如果后面区间的前端大于前面区间的后端,则说明重合;但在排序会

    2024年02月15日
    浏览(92)
  • LeetCode 36天 | 435.无重叠区域 763.划分字母区间 56.合并区间

    435. 无重叠区间 左边排序,右边裁剪为当前最小的 763. 划分字母区间 自己写出来的题,虽然之前做过一遍了。 自己的写法虽然比较难看,但是也列出来了。 再给一个卡尔的写法 56. 合并区间 重叠区域的题目大都要按左边界先排序。学了个lambda表达式。可以直接将一个区域放

    2024年02月20日
    浏览(72)
  • 【Leetcode60天带刷】day35——452. 用最少数量的箭引爆气球,435. 无重叠区间,763.划分字母区间

    ​ 452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组  points  ,其中 points[i] = [xstart, xend]  表示水平直径在  xstart  和  xend 之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点  完全垂直  

    2024年02月11日
    浏览(63)
  • day31贪心算法 用最少数量的箭引爆气球 和无重叠区间

    题目描述 题目分析: x轴向上射箭,12一支,重叠的需要一支,3-8一支,7-16一支 返回2; 就是让重叠的气球尽量在一起,局部最优;用一支弓箭,全局最优就是最少弓箭; 如何去寻找重叠的气球?和记录弓箭数? 1.对所有气球排序;(左边界排序如上图); 2. if 如果第i个气

    2024年02月16日
    浏览(47)
  • DAY35 435. 无重叠区间 + 763.划分字母区间 + 56. 合并区间

    题目要求:给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4], [1,3] ] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没

    2024年02月08日
    浏览(50)
  • 【算法之贪心算法IV】leetcode56. 合并区间

    力扣题目链接 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中 points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend 之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭

    2024年02月11日
    浏览(55)
  • LeetCode_贪心算法_中等_763.划分字母区间

    给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。 示例 1: 输入:s = “ababcbacadefegdehijhklij” 输出

    2024年02月14日
    浏览(79)
  • 2023华为OD机试真题【区间交叠/贪心算法】【Python Java C++】

    给定坐标轴上的一组线段,线段的起点和终点均为整数并且长度不小于1,请你从中找到最少数量的线段,这些线段可以覆盖住所有线段。 输入描述 第一行输入为所有线段的数量,不超过10000,后面每行表示一条线段,格式为”x,y”, x和y 分别表示起点和终点,取值范围是

    2024年02月13日
    浏览(53)
  • 【LeetCode: 56. 合并区间+贪心+双指针+标识+模拟】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包