栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数组、区间合并-[57] 插入区间

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数组、区间合并-[57] 插入区间


// @lc code=start
class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
      List re = new ArrayList<>(intervals.length);
        
      // 处理 newInterval 不在intervals的所有区间内  
      if(intervals.length == 0){
        re.add(newInterval);
        return re.toArray(new int[0][]);
      }else if(intervals[0][0] > newInterval[1]){
        // 小于所有区间
        re.add(newInterval);

        for(int i = 0; i < intervals.length; i++)
          re.add(intervals[i]);

        return re.toArray(new int[0][]);  
      }else if(intervals[intervals.length - 1][1] < newInterval[0]){
        // 大于所有区间
        for(int i = 0; i < intervals.length; i++)
          re.add(intervals[i]);    

        re.add(newInterval);

        return re.toArray(new int[0][]);
      }

      int type = 0;
      for(int le = 0; le < intervals.length; le++){

        if(type == 0 && intervals[le][0] <= newInterval[0] && intervals[le][1] >= newInterval[0]){
            // newIntervals的左区间在intervals的某段区间内
            re.add(intervals[le]);
          
            // 解决这样的情况[[1,5]] n [2,7]
            // newInterval的左端在intervals的区间内,但右段不在
            if(intervals[intervals.length - 1][1] < newInterval[1])
              intervals[le][1] = newInterval[1];

            type = 1;

            continue;
        }else if(type == 0 && newInterval[0] <= intervals[le][0] && newInterval[1] >= intervals[le][1]){
            
            // 当情况为这样时 [[1,5]] n [0,6]
            // newInterval包含intervals一段区间或全部区间
            re.add(newInterval);

            type = 1;

            continue;
        }else if(intervals[le][0] <= newInterval[1] && intervals[le][1] >= newInterval[1]){
          // newInterval的右端点在interval的某个区间

          if(1 == type){
            // newInterval的左端点在interval的某个区间
            re.get(re.size() - 1)[1] = intervals[le][1];
          }else{
            // newInterval的左端点小于当前le所指向的区间的左端点
            intervals[le][0] = newInterval[0];
            re.add(intervals[le]);
          }

          type += 2;
          
          continue;
        }else if(intervals[le][0] > newInterval[1] && type <= 1){

          if(1 == type){
            // newInterval的左端点在interval的某个区间
            if(re.get(re.size() - 1)[1] < newInterval[1]){
              // newInterval的右端点大于对应区间的右端点
              re.get(re.size() - 1)[1] = newInterval[1];
            }  
          }else{
            // newInterval 不在intervals的任何一段区间
            re.add(newInterval);
          }

          type += 2;
        }

        if(type != 1)
          re.add(intervals[le]);
      }

      return re.toArray(new int[0][]);
    }
}
// @lc code=end

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306555.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号