zoukankan      html  css  js  c++  java
  • 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.

    思路:

      插入位置+merge

    我的代码:

    public class Solution {
        public List<Interval> merge(List<Interval> intervals) {
            if(intervals == null || intervals.size() == 0)  return intervals;
            Collections.sort(intervals, new IntervalComparator());
            for(int i = 0; i < intervals.size() - 1; i++)
            {
                Interval one = intervals.get(i);
                Interval two = intervals.get(i+1);
                if(one.end >= two.start)
                {
                    one.end = Math.max(one.end, two.end);
                    intervals.remove(i+1);
                    i--;
                }
            }
            return intervals;
        }
        private class IntervalComparator implements Comparator<Interval>
        {
            public int compare(Interval a, Interval b)
            {
                return a.start - b.start;
            }
        }
    }
    View Code

    他人代码:

    public class Solution {
        public ArrayList<Interval> insert(ArrayList<Interval> intervals, Interval newInterval) {
            if (newInterval == null || intervals == null) {
                return intervals;
            }
    
            ArrayList<Interval> results = new ArrayList<Interval>();
            int insertPos = 0;
    
            for (Interval interval : intervals) {
                if (interval.end < newInterval.start) {
                    results.add(interval);
                    insertPos++;
                } else if (interval.start > newInterval.end) {
                    results.add(interval);
                } else {
                    newInterval.start = Math.min(interval.start, newInterval.start);
                    newInterval.end = Math.max(interval.end, newInterval.end);
                }
            }
    
            results.add(insertPos, newInterval);
    
            return results;
        }
    }
    View Code

    学习之处:

    • 我的代码需要进行两遍的扫描,别人代码需要一遍扫描,我的空间复杂度是O(1),别人的代码空间复杂度是O(n)
  • 相关阅读:
    hd CPU
    OS + Linux Interview
    db db2 v8.2
    project ERP_SAP R3 / SAP ECC / mySap
    命名空间和模块化编程3 C++快速入门41
    链接和作用域 C++快速入门42
    对象观察器(Object Inspector)
    Delphi7的窗体设计器
    对象观察器(Object Inspector)
    链接和作用域 C++快速入门42
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4490116.html
Copyright © 2011-2022 走看看