zoukankan      html  css  js  c++  java
  • [LeetCode] 56. Merge Intervals 合并区间

    Given a collection of intervals, merge all overlapping intervals.

    Example 1:

    Input: [[1,3],[2,6],[8,10],[15,18]]
    Output: [[1,6],[8,10],[15,18]]
    Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
    

    Example 2:

    Input: [[1,4],[4,5]]
    Output: [[1,5]]
    Explanation: Intervals [1,4] and [4,5] are considerred overlapping.

    给定一个有重叠的区间集合,合并所有重叠的区间。先对区间以第一个元素进行排序,定义一个变量result记录合并后的区间。然后迭代这些区间,如果区间的开始值大于result的最后一个区间的结尾值,说明整个区间都在result的最后一个区间的右侧,直接添加到result。如果区间开始值小于result的最后一个区间的结尾值,则有重合需要合并,result中的最后一个区间的尾部值变为两个尾部中的最大值。

    Java:

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

    Java:

    class Solution {
        /**
         * @param intervals, a collection of intervals
         * @return: A new sorted interval list.
         */
        public List<Interval> merge(List<Interval> intervals) {
            List<Interval> ans = new ArrayList<>();
    
            intervals.sort(Comparator.comparing(i -> i.start)); 
    
            Interval last = null;
            for (Interval item : intervals) {
                if (last == null || last.end < item.start) {
                    ans.add(item);
                    last = item;
                } else {
                    last.end = Math.max(last.end, item.end); 
                }
            }
            return ans;
        }
    }  

    Python:

    """
    Definition of Interval.
    class Interval(object):
        def __init__(self, start, end):
            self.start = start
            self.end = end
    """
    
    class Solution:
        # @param intervals, a list of Interval
        # @return a list of Interval
        def merge(self, intervals):
            intervals = sorted(intervals, key=lambda x: x.start)
            result = []
            for interval in intervals:
                if len(result) == 0 or result[-1].end < interval.start:
                    result.append(interval)
                else:
                    result[-1].end = max(result[-1].end, interval.end)
            return result

    C++:

    class Solution {
    public:
        static bool comp(const Interval &a, const Interval &b) {
            return (a.start < b.start);
        }
        vector<Interval> merge(vector<Interval> &intervals) {
            vector<Interval> res;
            if (intervals.empty()) return res;
            sort(intervals.begin(), intervals.end(), comp);
            res.push_back(intervals[0]);
            for (int i = 1; i < intervals.size(); ++i) {
                if (res.back().end >= intervals[i].start) {
                    res.back().end = max(res.back().end, intervals[i].end);
                } else {
                    res.push_back(intervals[i]);
                }
            }
            return res;
        }
    };
    

        

    类似题目:

    [LeetCode] 57. Insert Interval 插入区间

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    zend server 配置问题 ZendEnablerConf.xml
    ZendStudio 正式版注册破解
    eq几种样式
    js 简单语法 集合
    div上加连接》实用笔记
    VC解析XML使用CMarkup类解析XML
    用PNG透明图片和GDI+做不规则透明窗体"异形窗口"
    程序调试手记—解决Stack Overflow问题
    堆和栈的区别
    CString转换为char *
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8512220.html
Copyright © 2011-2022 走看看