zoukankan      html  css  js  c++  java
  • 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:
    Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

    Example 2:
    Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

    This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

    /**
     * Definition for an interval.
     * struct Interval {
     *     int start;
     *     int end;
     *     Interval() : start(0), end(0) {}
     *     Interval(int s, int e) : start(s), end(e) {}
     * };
     */
    class Solution {
    public:
        vector<Interval> insert(vector<Interval>& intervals, Interval newInterval) {
            int intervalsSize = intervals.size();
            vector<Interval> res;
            if(intervalsSize==0){
                res.push_back(newInterval);
                return res;
            }
            bool isFindStart = false,isFindEnd = false;
            int start = newInterval.start,end = newInterval.end;
            int startIndex = 0,endIndex=0;
            for(int i =0;i<intervalsSize;i++){//查找合并区间的起始和结束位置
                if(!isFindStart){
                    if(start >= intervals[i].start && start<=intervals[i].end){
                        isFindStart = true;
                        start = intervals[i].start;
                        startIndex = i;
                    }else if(start<intervals[i].start){
                        startIndex = i;
                        isFindStart = true;
                    }
                }
             //   cout<<"end="<<end<<",intervals["<<i<<"].start="<<intervals[i].start<<",intervals["<<i<<"].end="<<intervals[i].end<<endl;
                if(!isFindEnd){
                    if(end >= intervals[i].start && end<=intervals[i].end ){
                        isFindEnd = true;
                        end = intervals[i].end;
                        endIndex = i;
                    }else if(end<intervals[i].start){
                        endIndex = i-1;
                        isFindEnd = true;
                    }   
                }
                if(isFindStart && isFindEnd){
                    break;
                }
            }
            if(!isFindStart) startIndex = intervalsSize;
            for(int j=0;j<startIndex;j++){
                res.push_back(intervals[j]);
            }
            res.push_back(Interval(start,end));
            if(!isFindEnd) endIndex = intervalsSize-1;
            for(int j=endIndex+1;j<intervalsSize;j++){
                res.push_back(intervals[j]);
            }
            
            return res;
        }
    };
  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/zengzy/p/5006005.html
Copyright © 2011-2022 走看看