zoukankan      html  css  js  c++  java
  • Java for LeetCode 057 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].

    解题思路一:

    参考Java for LeetCode 056 Merge Intervals思路一,去掉最外层循环即可,JAVA实现如下:

    public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            if (newInterval == null)
                return intervals;
                int startIndex = 0, endIndex = 0;
                for (int j = 0; j < intervals.size(); j++) {
                    if (newInterval.start > intervals.get(j).end) {
                        startIndex += 2;
                        endIndex += 2;
                        continue;
                    }
                    if (newInterval.end < intervals.get(j).start)
                        break;
                    if (newInterval.start >= intervals.get(j).start)
                        startIndex++;
                    if (newInterval.end > intervals.get(j).end) {
                        endIndex += 2;
                        continue;
                    }
                    if (newInterval.end >= intervals.get(j).start)
                        endIndex++;
                    break;
                }
                if(startIndex==endIndex&&startIndex%2==0)
                    intervals.add(startIndex/2,new Interval(newInterval.start,newInterval.end));
                else if(startIndex%2==0&&endIndex%2==0){
                    intervals.get(startIndex/2).start=newInterval.start;
                    intervals.get(startIndex/2).end=newInterval.end;
                    for(int k=1;k<endIndex/2-startIndex/2;k++)
                    intervals.remove(startIndex/2+1);
                }
                else if(startIndex%2==0&&endIndex%2!=0){
                    intervals.get(startIndex/2).start=newInterval.start;
                    intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
                    for(int k=1;k<=endIndex/2-startIndex/2;k++)
                        intervals.remove(startIndex/2+1);
                }
                else if(startIndex%2!=0&&endIndex%2==0){
                    intervals.get(startIndex/2).end=newInterval.end;
                    for(int k=1;k<endIndex/2-startIndex/2;k++)
                        intervals.remove(startIndex/2+1);
                }
                else if(startIndex%2!=0&&endIndex%2!=0){
                    intervals.get(startIndex/2).end=intervals.get(endIndex/2).end;
                    for(int k=1;k<=endIndex/2-startIndex/2;k++)
                        intervals.remove(startIndex/2+1);
                }
            return intervals;
        }
    

     解题思路二:

    参考Java for LeetCode 056 Merge Intervals思路二,添加后重新排序即可,JAVA实现如下:

    	public List<Interval> insert(List<Interval> intervals, Interval newInterval) {
            if (intervals == null) 
            	return intervals;
            List<Interval> list = new ArrayList<Interval>();
            intervals.add(newInterval);
            Comparator<Interval> comparator = new Comparator<Interval>() {
                @Override
                public int compare(Interval o1, Interval o2) {
                    if (o1.start == o2.start)
                        return o1.end - o2.end;
                    return o1.start - o2.start;
                }
            };
            Collections.sort(intervals, comparator);
            for (Interval interval : intervals) {
                if (list.size() == 0 || list.get(list.size() - 1).end < interval.start) 
                    list.add(new Interval(interval.start, interval.end));
                else
                    list.get(list.size() - 1).end = Math.max(interval.end, list.get(list.size() - 1).end);
            }
            return list;
        }
    
  • 相关阅读:
    Properties读取资源文件的四种方法
    如何成为一个C++高级程序员
    Linux定时任务设定
    Mysql之复制选项与监控
    GTID复制之二
    Mysql之多源复制
    MysqlDumpslow
    用Mysqlbinlog备份BinLog文件
    Mysql之mysqlbinlog使用
    Mysql之取消主从复制
  • 原文地址:https://www.cnblogs.com/tonyluis/p/4506704.html
Copyright © 2011-2022 走看看