zoukankan      html  css  js  c++  java
  • [leetcode] 57. 插入区间

    57. 插入区间

    把这个newInterval加入到list中,然后调用56. 合并区间的代码。。。

    class Solution {
        public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            intervals.add(newInterval);
            return merge(intervals);
        }
    
        public List<Interval> merge(List<Interval> intervals) {
            if (intervals.size() <= 1) {
                return intervals;
            }
            intervals.sort((e1, e2) -> {
                if (e1.start == e2.start) {
                    return Integer.compare(e1.end, e2.end);
                }
                return Integer.compare(e1.start, e2.start);
            });
    
            List<Interval> ans = new ArrayList<>();
            for (int i = 0; i < intervals.size(); i++) {
                Interval cur = intervals.get(i);
                while (i + 1 < intervals.size()) {
                    Interval next = intervals.get(i + 1);
                    if (cur.end >= next.start) {
                        cur.end = Math.max(cur.end, next.end);
                        i++;
                    } else {
                        break;
                    }
                }
                ans.add(cur);
            }
    
            return ans;
        }
    }
    

    不过,既然人家题都出了,且说给出的就是一个无重叠、已经排好序的List,让你只插一个就好。那我们是不是可以只针对这一个插入的处理呢?

    当然可以了,首先可以先找到newInterval.start应该待的位置,然后再判断newInterval.end的位置,将中间的全部吃掉即可。
    懒。。就不写代码了

    幸好没要求你做原地操作。。这样的话难度就大大增加了。。

  • 相关阅读:
    Java数组的内存结构
    2014.11.9--最近的小感悟
    十一两天感悟
    Are you happiness
    Are you busy?
    Lesson 81-82 Are they true
    Lesson 79-80 People are getting sick
    Lesson 77-78 Socially Discriminated Against
    Lesson 75-76 Shopping on the web
    更新单点,求区间—— luogu 3374
  • 原文地址:https://www.cnblogs.com/acbingo/p/9357505.html
Copyright © 2011-2022 走看看