zoukankan      html  css  js  c++  java
  • 【leetcode】Insert Interval

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

     
     
     1 /**
     2  * Definition for an interval.
     3  * struct Interval {
     4  *     int start;
     5  *     int end;
     6  *     Interval() : start(0), end(0) {}
     7  *     Interval(int s, int e) : start(s), end(e) {}
     8  * };
     9  */
    10 class Solution {
    11 public:
    12     vector<Interval> insert(vector<Interval> &intervals, Interval newInterval) {
    13        
    14         int n=intervals.size();
    15         vector<Interval> result;
    16        
    17         if(n==0)
    18         {
    19             result.push_back(newInterval);
    20             return result;
    21         }
    22        
    23         int start=newInterval.start;
    24         int end=newInterval.end;
    25  
    26        
    27         bool isfindStart=false;
    28         bool isfindEnd=false;
    29         bool addCur=true;
    30        
    31         for(int i=0;i<n;i++)
    32         {
    33             addCur=true;
    34            
    35             if(!isfindStart)
    36             {
    37                 //和当前区间没有交叉,且在start的前面
    38                 if(start>intervals[i].end)
    39                 {
    40                     //需要添加当前元素
    41                     addCur=true;
    42                     //当前元素为最后一个元素时,则认为start找到了
    43                     if(i==n-1)  isfindStart=true;
    44                 }
    45                 else
    46                 {
    47                     //和当前区间有交叉 或者start小于当前区间
    48                    
    49                     start=min(start,intervals[i].start);
    50                     //后续就不用再找start了
    51                     isfindStart=true;
    52                    
    53                     //如果start和end没有和其他Interval有交叉
    54                     if(end<intervals[i].start) addCur=true;
    55                     else addCur=false;
    56                 }
    57             }
    58            
    59            
    60             if(!isfindEnd)
    61             {
    62                 //需要继续找end
    63                 if(end>intervals[i].end)
    64                 {
    65                    
    66                     if(start<=intervals[i].end) addCur=false;
    67  
    68                     if(i==n-1)
    69                     {
    70                         isfindEnd=true;
    71                        
    72                         if(addCur) result.push_back(intervals[i]);
    73                         result.push_back(Interval(start,end));
    74                        
    75                         continue;
    76                     }
    77                 }
    78                 else
    79                 {
    80                     //end小于当前区间,此时找到了end
    81                     end=end>=intervals[i].start?intervals[i].end:end;
    82  
    83                     //找到了end
    84                     isfindEnd=true;
    85                     if(end>=intervals[i].start) addCur=false;
    86                    
    87                     result.push_back(Interval(start,end));
    88                     if(addCur) result.push_back(intervals[i]);
    89                    
    90                     continue;
    91                 }
    92             }
    93            
    94             if(addCur) result.push_back(intervals[i]);
    95         }
    96         return result;
    97     }
    98 };
  • 相关阅读:
    康拓展开和康拓逆展开
    快速乘法(基于快速幂)
    扩展欧几里德 POJ 1061
    九度OJ 1552座位问题(dp)
    UVA-10462.Is There A Second Way Left(Kruskal+次小生成树)
    POJ-1679.The Unique MST.(Prim求次小生成树)
    次小生成树(Prim + Kruaskal)
    POJ-1287.Network(Kruskal + Prim + Prim堆优化)
    最小生成树基础算法(Prim + Krustal)
    POJ-2492.A Bug's Life(带权并查集)
  • 原文地址:https://www.cnblogs.com/reachteam/p/4213664.html
Copyright © 2011-2022 走看看