zoukankan      html  css  js  c++  java
  • 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】

    【057-Insert Interval(插入区间)】


    【LeetCode-面试算法经典-Java实现】【全部题目文件夹索引】

    原题

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

    题目大意

      给定一系列非覆盖的区间,插入一个新的区间。有必要的时候进行区间合并。区间開始是以起始时间进行合并的

    解题思路

      假设原来的区间比插入区间小就插入结果集,假设插入区间有重叠,更新插入区间。假设插入区间小于原来的区间,先插入插入区间。再增加大的区间

    代码实现

    算法实现类

    import java.util.LinkedList;
    import java.util.List;
    
    public class Solution {
    
        public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
    
            // 保存结果的集合
            List<Interval> result = new LinkedList<>();
    
            // 输入集非空
            if (intervals != null) {
                // 遍历元素
                for (Interval item : intervals) {
                    // newInterval == null 表示插入的区间已经处理完了
                    // 将比插入区间小的区间增加结果集中
                    if (newInterval == null || item.end < newInterval.start) {
                        result.add(item);
                    }
                    // 将比插入区间大的区间增加结果集中,同一时候将插入的区间增加结果集
                    else if (item.start > newInterval.end) {
                        result.add(newInterval);
                        result.add(item);
                        newInterval = null;
                    }
                    // 插入区间有重叠,更新插入区间
                    else {
                        newInterval.start = Math.min(newInterval.start, item.start);
                        newInterval.end = Math.max(newInterval.end, item.end);
                    }
                }
            }
    
            // 假设插入区间非空说明插入区间还未被处理
            if (newInterval != null) {
                result.add(newInterval);
            }
    
            return result;
        }
    }
    

    评測结果

      点击图片,鼠标不释放。拖动一段位置。释放后在新的窗体中查看完整图片。

    这里写图片描写叙述

    特别说明

    欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47164431

  • 相关阅读:
    如何取消隐藏工作簿,使工作簿可见
    Android小知识总结
    Android内存泄露总结
    Ubuntu 升级VisualBox后无法启动 Kernel driver not installed (rc=-1908)
    Eclipse颜色主题插件:Eclipse Color Theme
    使用Json的注意事项
    android中正确导入第三方jar包
    设计模式--单例模式学习
    比较好的学习网址总结
    二叉树学习总结(Java实现)
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7053702.html
Copyright © 2011-2022 走看看