`

57 Insert Interval——leetcode

阅读更多
57 Insert Interval
/**
 * Definition for an interval.
 * struct Interval {
 *     int start;
 *     int end;
 *     Interval() : start(0), end(0) {}
 *     Interval(int s, int e) : start(s), end(e) {}
 * };
 */
 bool overlap(const Interval &left,const Interval &right){
    return !(left.end<right.start||right.end<left.start);
}
struct Overlap:public std::binary_function<Interval,Interval,bool>{
    bool operator()(const Interval &left,const Interval&right)const{
        return !(left.end<right.start||right.end<left.start);
    }
};
struct IntervalCompare:public std::binary_function<Interval,Interval,bool>{
    bool operator()(const Interval &left,const Interval&right)const{
        return left.start<right.start;
    }
};
class Solution {
public:
 vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
        vector<Interval> ans;
        
        ans.reserve(intervals.size());
        if(intervals.empty()){
            ans.push_back(newInterval);
            return ans;
        }
        // std::sort(intervals.begin,intervals.end(),IntervalCompare());
        int i=0;
        Interval merge = intervals[0];
        vector<Interval> &merges=intervals;
        merge = newInterval;
        
        if(newInterval.end<merges[0].start)
        {
        }
        else
        {
            for(i=0;i<merges.size();i++)
            {
                if(Overlap()(merge,merges[i]))
                {
                    merge.start = std::min(merge.start,merges[i].start);
                    merge.end = std::max(merge.end,merges[i].end);
                }
                else
                {
                    if(merge.end<merges[i].start){
                        break;
                    }
                    ans.push_back(merges[i]);
                }
            }
        }
        ans.push_back(merge);
        ans.insert(ans.end(),merges.begin()+i,merges.end());
        return ans;
    }
};

 

这个其实,像扫描线(sweep)算法(在二维计算几何中,经常用到)

基本思路:注意到已经按照每个Interval的start排序了

<1>将需要检查的newInterval,依次和每个interval合并(循环)

<2>如果发现没有重叠,跳出

<3>添加合并后的merge 区间,添加哪些不与newInterval重叠的区间。

 

上述,很容易理解,但有个问题:

为什么保证结果一定有序?即按照区间的start排序?

其实,这是因为,<1>中基本上属于插入排序过程,所以结果一定有序。

 

分享到:
评论

相关推荐

    LeetCode题解(java语言实现).pdf

    * Insert Interval:该题目要求将一个区间插入到另一个区间中,实现方法使用了排序和迭代算法。 三、字符串和动态规划 * String to Integer (atoi):该题目要求将字符串转换成整数,实现方法使用了状态机算法。 * ...

    Coding Interview In Java

    12 Insert Interval 45 13 Two Sum 47 14 Two Sum II Input array is sorted 49 15 Two Sum III Data structure design 51 16 3Sum 53 17 4Sum 55 18 3Sum Closest 57 19 String to Integer (atoi) 59 20 Merge ...

    Python 数值区间处理_对interval 库的快速入门详解

    虽然可以使用传统的 `if-else` 语句实现区间判断,但在 Python 中,有一个更加高效且易于使用的库——`interval`,它能够简化区间操作的过程。本文将详细介绍 `interval` 库的基本用法和高级功能,帮助读者快速掌握...

    delphi *.textgrid文件到*.interval

    标题提到的"delphi *.textgrid文件到*.interval" 指的是使用Delphi编程环境编写的一个工具,该工具能够将Praat的TextGrid文件转换为interval格式。Delphi是一个强大的Windows应用程序开发平台,基于Object Pascal...

    Leetcode部分解答(126题)

    5. **Merge Intervals(using (Insert Interval) ).cpp** - 这是第56题“合并区间”的解冑,涉及到区间操作,尤其是如何有效地插入新区间并合并重叠区间。 6. **Integer to Roman.cpp** - 第40题,与“Roman to ...

    LeetCode题解 - Java语言实现-181页.pdf

    10. Insert Interval 区间插入是一个数组问题,要求将一个区间插入到已经排序的区间数组中。可以使用二分搜索来解决该问题。 11. Two Sum 两数之和是一个经典的数组问题,要求找到数组中两个元素之和等于目标值的...

    Interval Finite Element Method with MATLAB

    ### Interval Finite Element Method (IFEM) with MATLAB #### 引言 《Interval Finite Element Method with MATLAB》这本书由Sukantan Nayak与Snehashish Chakraverty合著,由学术出版社(Academic Press)出版,...

    LeetCode最全代码

    # [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...

    C#全能速查宝典

    1.5.13 Insert方法——插入项 110 1.5.14 Item属性——获取或设置指定索引处的元素 111 1.5.15 Length属性——获取长度 112 1.5.16 Next方法——返回一个指定范围内的随机数 113 1.5.17 Queue类——队列 115 1.5.18 ...

    _leetcode-python.pdf

    - Insert Interval: 在一组已经排序的区间中,插入一个新的区间。 - Rotate List: 给定一个链表的头节点head,当旋转了k个位置后,返回链表的新头节点。 - Unique Paths / Unique Paths II: 前者计算从矩阵的左上角...

    Delphi 12 控件之Interval Software Envision Image Library v4.02 for

    Interval Software Envision Image Library v4.02 是一个专为 Delphi 开发者设计的图像处理库,适用于 Delphi 7 到 11 Alexandria 的版本。这个库提供了丰富的功能,帮助开发者在 Delphi 应用程序中实现复杂的图像...

    Interval zero公司的实时windows RTX 8.0 Demo版

    此软件为实时Windows操作系统扩展,安装此软件后Windows操作系统即具备实时性能。既获得0.1微秒级的实时特性,又发挥Windows平台的优点。标准的Windows编程开发环境, 用Visual C++/Studio开发。...

    leetcode2-LeetCode-Class:主要是JavaScript在LeetCode上面的ListNode与TreeNode,方便各

    Interval 、 Employee 列表节点 构造函数 const node = new ListNode ( val ) 使用数组初始化 (遵循 LeetCode 主题规范): ListNode.create(arr : Array) : ListNode const head = ListNode . create ( [ 1 , 2 , ...

    VGA图像显示控制器——数电综合实验报告

    ### VGA图像显示控制器——数电综合实验报告 #### VGA简介 VGA(Video Graphics Array)是一种使用模拟信号的电脑显示标准,由IBM于1987年提出。VGA最初是指一种显示模式,即640x480的分辨率。VGA标准支持在640x...

    matlab开发-Intervaltype2fuzzylogic系统的功能

    在MATLAB环境中开发间隔型2型模糊逻辑系统(Interval Type-2 Fuzzy Logic System, IT2 FLS)是一项复杂而有趣的任务,它涉及到模糊逻辑、数学建模以及控制理论等多个领域。本文将深入探讨MATLAB如何支持此类系统,并...

    可以精确到1毫秒的定时器——多媒体定时器 用户控件

    ' 2、设置 Interval 属性。 ' 3、设置 Enabled 属性,开启或关闭计时器。 ' 4、在 Timer() 事件中添加执行代码。 ' 作 者:鹤望兰·流 ' 发布日期:2010-05-27 ' 网 站:http://hewanglan.ys168.com ' E - mail:...

    INTERVAL_tree

    在这个项目中,头文件可能包含了`IntervalTree`类的定义,其中包括构造函数、析构函数以及之前提到的`insert`、`query`、`remove`等成员函数的声明。 区间树在实际应用中有很多用途,例如在数据库索引、日程安排、...

    interval analysis

    ### Interval Analysis概述与应用 #### 一、动机与背景 区间分析(interval analysis)是一种数学工具和技术,用于处理计算过程中的不确定性。在实际工程和科学计算中,存在多种类型的误差来源,包括但不限于: - *...

    桌面宠物——不做单身狗

    定时器控件则负责定期触发这些动作,通过调整定时器的Interval属性,可以控制动画的帧率。 此外,实现桌面宠物的交互功能是关键。这可以通过响应用户的鼠标点击、键盘输入或者系统事件(如托盘通知)来完成。例如,...

Global site tag (gtag.js) - Google Analytics