zoukankan      html  css  js  c++  java
  • Merge Intervals

    Merge Intervals

    问题:

    Given a collection of intervals, merge all overlapping intervals.

    思路:

      不排序 直接上根据交集的特性

      排序后再判断

      简单的数学推导

    我的代码1:

    public class Solution {
        public List<Interval> merge(List<Interval> intervals) {
            if(intervals == null || intervals.size() == 0)  return intervals;
            for(int i = 0; i < intervals.size(); i++)
            {
                Interval interval = intervals.get(i);
                int min = interval.start;
                int max = interval.end;
                for(int j = i+1; j < intervals.size(); j++)
                {
                    Interval tmp = intervals.get(j);
                    if(isIntersect(interval, tmp))
                    {
                        intervals.remove(j);
                        j--;
                        max = Math.max(max, tmp.end);
                        min = Math.min(min, tmp.start);
                    }
                }
                if(min == interval.start && max == interval.end) i++;
                interval.start = min;
                interval.end = max;
                i--;
            }
            return intervals;
        }
        public boolean isIntersect(Interval one, Interval two)
        {
            int oneS = one.start;
            int oneE = one.end;
            int twoS = two.start;
            int twoE = two.end;
            if(oneE >= twoS && oneE <= twoE)    return true;
            if(twoE >= oneS && twoE <= oneE)    return true;
            if(oneE >= twoE && oneS <= twoS)    return true;
            if(twoE >= oneE && twoS <= oneS)    return true;
            return false;
        }
    }
    View Code

    我的代码2:

    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
  • 相关阅读:
    一分钟了解Docker
    RobotFramework
    RobotFramework不同版本优劣势
    从零学习基于Python的RobotFramework自动化
    Python 接口自动化常用方法封装
    (转载)解决MySql 数据库 提示:1045 access denied for user 'root'@'localhost' using password yes
    (转载)html中div使用自动高度
    javascriptDOM对象之scrollTo()方法,滚动到页面指定位置
    CSS3之响应式布局
    Html5NodeJs安装less之千辛万苦CMD系列
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4340345.html
Copyright © 2011-2022 走看看