zoukankan      html  css  js  c++  java
  • 57. Insert Interval

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).

    You may assume that the intervals were initially sorted according to their start times.

    Example 1:

    Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
    Output: [[1,5],[6,9]]
    

    Example 2:

    Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
    Output: [[1,2],[3,10],[12,16]]
    Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].

    解1:正常解法,时间复杂度O(n)

    class Solution {
    public:
        vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
            vector<vector<int>> res;
            int n = intervals.size();
            int i = 0;
            
            while(i < n && intervals[i][1] < newInterval[0])
            {
                res.push_back(intervals[i]);
                ++i;
            }
               
            while(i < n && intervals[i][0] <= newInterval[1])
            {
                newInterval[0] = min(newInterval[0], intervals[i][0]);
                newInterval[1] = max(newInterval[1], intervals[i][1]);
                ++i;
            }
            
            res.push_back(newInterval);
            while(i < n)res.push_back(intervals[i++]);
            return res;
        }
    };

    解2:利用STL函数equal_range()进行二分查找

    class Solution {
    public:
        vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
            auto compare = [](vector<int> a, vector<int> b) {return a[1] < b[0];};
            auto itRange = equal_range(intervals.begin(),intervals.end(),newInterval,compare);
            auto it1 = itRange.first, it2 = itRange.second;
            if (it1 == it2)
                intervals.insert(it1,newInterval);
            else
            {
                it2--;
                (*it2)[0] = min(newInterval[0],(*it1)[0]);
                (*it2)[1] = max(newInterval[1],(*it2)[1]);
                intervals.erase(it1,it2);
            }
            return intervals;
        }
    };
  • 相关阅读:
    基于openpose的动作识别(一)检测人脸人手
    12.4第三天
    安装linux windows双系统
    python学习之argparse模块
    win10安装linux虚拟机
    使用labelImg训练模型并用yolo3进行识别的工作流程
    使用labelImg标注数据的方法
    VirtualBox网络连接方式
    HttpWebRequest 请求带OAuth2 授权的webapi
    Bootstrap table 分页 In asp.net MVC
  • 原文地址:https://www.cnblogs.com/qiang-wei/p/11985737.html
Copyright © 2011-2022 走看看