zoukankan      html  css  js  c++  java
  • 156. 合并区间

    描述

    给出若干闭合区间,合并所有重叠的部分。

    样例

    Given intervals => merged intervals:

    [ [
    (1, 3), (1, 6),
    (2, 6), => (8, 10),
    (8, 10), (15, 18)
    (15, 18) ]
    ]

    /**
     * Definition of Interval:
     * classs Interval {
     *     int start, end;
     *     Interval(int start, int end) {
     *         this->start = start;
     *         this->end = end;
     *     }
     * }
     */
    
    static bool cmp(Interval& a, Interval& b) {
        return a.start < b.start;
    }
    
    class Solution {
    public:
        /**
         * @param intervals: interval list.
         * @return: A new interval list.
         */
        vector<Interval> merge(vector<Interval> &intervals) {
            // write your code here
            vector<Interval> res;
            if (intervals.size() == 0) 
                return res;
                
            sort(intervals.begin(), intervals.end(), cmp);
            res.push_back(intervals.front());
            for (int i=1; i<intervals.size(); ++i) {
                if (intervals[i].start<=res.back().end) {
                    res.back().end = max(res.back().end, intervals[i].end);
                } else {
                    res.push_back(intervals[i]);
                }
            }
            
        }
    };
    

    挑战
    O(n log n) 的时间和 O(1) 的额外空间。

    /**
     * Definition of Interval:
     * classs Interval {
     *     int start, end;
     *     Interval(int start, int end) {
     *         this->start = start;
     *         this->end = end;
     *     }
     * }
     */
    
    static bool cmp(Interval& a, Interval& b) {
        return a.start < b.start;
    }
    
    class Solution {
    public:
        /**
         * @param intervals: interval list.
         * @return: A new interval list.
         */
        vector<Interval> merge(vector<Interval> &intervals) {
            // write your code here
            sort(intervals.begin(), intervals.end(), cmp);
            for (auto it = intervals.begin(); it != intervals.end(); ) {
                if (it+1!=intervals.end() && (*it).end >= (*(it+1)).start) {
                    (*it).end = max((*it).end, (*(it+1)).end);
                    intervals.erase(it+1);
                } else ++it;
            }
            return intervals;
        }
    };
    
  • 相关阅读:
    ES6基础
    RegExp正则表达式基础
    JavaScript基础之--- 手写 bind 方法的实现
    JavaScript基础之--- 手写 apply方法 的实现
    JavaScript基础之--- 手写 call 的实现
    JavaScript基础之--- 手写instanceof 的实现
    git系列之---工作中项目的常用git操作
    git系列之---将本地的项目添加到码云仓库
    git系列之---码云gitee 添加SHH公钥
    TCP的三次握手过程
  • 原文地址:https://www.cnblogs.com/narjaja/p/9799144.html
Copyright © 2011-2022 走看看