• Leetcode Merge Intervals


    Given a collection of intervals, merge all overlapping intervals.

    For example,
    Given [1,3],[2,6],[8,10],[15,18],
    return [1,6],[8,10],[15,18].

     题目的意思是将相交得区间合并,典型的贪心算法

    首先将区间先按照start进行排序,

    然后保存先前区间的start和end

    如果当前的start > 先前的end,说明当前的区间与之前的区间不想交,则将先前的区间放入结果中,同时更新start和end

    如果当前的start < 先前的end,说明当前的区间与先前的区间相交,故比较当前的end与先前的end,如果当前的end大于先前的end,则更新先前的end为当前的end

    bool cmp(const Interval& a, const Interval& b){
        if(a.start!=b.start) return a.start < b.start;
        else return a.end < b.end;
    }
    
    class Solution {
    public:
        vector<Interval> merge(vector<Interval> &intervals) {
            sort(intervals.begin(), intervals.end(), cmp);
            vector<Interval> res;
            if(intervals.size() == 0) return res;
            int start = intervals[0].start, end = intervals[0].end;
            for(int i = 1 ; i <  intervals.size(); ++ i){
                if(intervals[i].start > end){
                    res.push_back(Interval(start,end));
                    start = intervals[i].start, end = intervals[i].end;
                }else{
                    end = max(end, intervals[i].end);
                }
            }
            res.push_back(Interval(start,end));
            return res;
        }
    };
     
  • 相关阅读:
    清北学堂2019NOIP提高储备营DAY1
    最小生成树--克鲁斯卡尔算法(Kruskal)
    关于队列(还有广度优先搜索的例题)
    染色问题
    行列式的相关知识
    素数筛法
    中国剩余定理(孙子定理)
    AOJ 9.University
    AOJ 8.童年生活二三事
    AOJ 7.Redraiment猜想
  • 原文地址:https://www.cnblogs.com/xiongqiangcs/p/3825951.html
Copyright © 2020-2023  润新知