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
  • 相关阅读:
    简单的Makefile
    共享库
    链接静态库
    /proc/uptime参数的意义
    磁盘挂载失败
    linux环境变量设置
    使用systemd-analyze 工具来分析各个服务进程的启动性能
    面试-2020C/C++后台开发深信服科技股份有限公司一面凉经(一问三不知,我是真的菜。。。)
    笔记-C/C++工程师面试笔记收集整理
    SpringCloud-分布式与集群的使用四(断路器Hystrix)
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4340345.html
Copyright © 2011-2022 走看看