LeetCode每日一题:56. 合并区间(2023.8.27 C++)

这篇具有很好参考价值的文章主要介绍了LeetCode每日一题:56. 合并区间(2023.8.27 C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

56. 合并区间

题目描述:

实现代码与解析:

排序 + 贪心

原理思路:


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].

示例 2:

输入:intervals = [[1,4],[4,5]]
输出:[[1,5]]
解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。

提示:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

实现代码与解析:

排序 + 贪心

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        // 从小到大,按左端排序
        sort(intervals.begin(), intervals.end(), [&](const auto &a, auto &b){
            return a[0] < b[0];
        });

        vector<vector<int>> res;
        res.push_back(intervals[0]);

        for (int i = 0; i < intervals.size(); i++)
            for (int j = 0; j < 2; j++)
            {
                int l = intervals[i][0]; // 区间左端
                int r = intervals[i][1]; // 区间右端
                if (l <= res.back()[1] && r > res.back()[1])  res.back()[1] = r; // 有重叠, 但不包含
                else if (l <= res.back()[1] && r <= res.back()[1]); // 有重叠,但是包含
                else res.push_back({l, r}); // 无重叠
            }
        
        return res;
    }
};

原理思路:

        先将区间按左端点排序,然后遍历,若后区间的左端点小于等于前区间的右端点,就将两区间合并,谁的右端点大就用谁的,若无重合区间,直接将区间加入结果中。  文章来源地址https://www.toymoban.com/news/detail-675143.html

到了这里,关于LeetCode每日一题:56. 合并区间(2023.8.27 C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • LeetCode[56]合并区间

    难度:Medium 题目: 以数组  intervals  表示若干个区间的集合,其中单个区间为  intervals[i] = [starti, endi]  。请你合并所有重叠的区间,并返回  一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间  。 示例 1:   示例 2: 提示: 1 = intervals.length = 104 intervals[i].lengt

    2024年02月12日
    浏览(65)
  • LeetCode56.合并区间

    这道题我想了一会儿,实在想不到比较好的算法,只能硬着头皮写了,然后不断的debug,经过我不懈的努力,最后还是AC,不过效率确实低。 我就是按照最直接的方法来,先把intervals数组按照第一个数start来排序,这个是通过定义一个sort方法用冒泡排序实现的,然后用一个L

    2024年02月11日
    浏览(37)
  • Leetcode56. 合并区间

    以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:intervals = [[1,3],[2,6],[8,10],[15,18]] 输出:[[1,6],[8,10],[15,18]] 解释:区间 [1,3] 和

    2024年01月23日
    浏览(37)
  • 2023-08-13 LeetCode每日一题(合并两个有序数组)

    点击跳转到题目位置 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 **注意:**最终,合并后数组不应由函数返回,而是存储在数组 num

    2024年02月13日
    浏览(60)
  • 2023-08-12 LeetCode每日一题(合并 K 个升序链表)

    点击跳转到题目位置 给你一个链表数组,每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例 1: 示例 2: 示例 3:

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

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

    2024年02月10日
    浏览(35)
  • Leetcode 56. 合并区间(排序 + sort 方法的注意)

    Leetcode 56. 合并区间(排序 + sort 方法的注意) 题目 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。 请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 1 = intervals.length = 10^4 intervals[i].length ==

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

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

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

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

    2024年02月20日
    浏览(79)
  • 每日一题:leetcode 57 插入区间

    给你一个  无重叠的  , 按照区间起始端点排序的区间列表。 在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: 0 = intervals.length = 104 intervals[i].length == 2 0 = int

    2024年02月11日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包