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

    题目:给出一个区间集合,求合并所有重叠后的区间。

    分析:区间处理先上套路,按左端点作第一维,右端点作第二维进行排序。依次考察每个区间,假设前面所有区间合并后是[left, right],若当前区间的左端点小于等于right,right=max(right, 当前区间的右端点);否则说明有空格,将[left, right]加入答案,新区间作为[left, right]。

    class Solution {
    public:
        vector<vector<int>> merge(vector<vector<int>>& intervals) {
            int n = intervals.size();
            if(n == 0)  return {};
            vector<vector<int>>ans;
            vector<pair<int, int>>myinter;
            for(int i = 0;i < n;i++)
                myinter.push_back(make_pair(intervals[i][0], intervals[i][1]));
            sort(myinter.begin(), myinter.end());
    
            int left = myinter[0].first, right = myinter[0].second;
            for(int i = 1;i < n;i++)
            {
                if(myinter[i].first <= right)  
                    right = max(right, myinter[i].second);
                else
                {
                    ans.push_back(vector<int>{left, right});
                    left = myinter[i].first;
                    right = myinter[i].second;
                }
            }
            ans.push_back(vector<int>{left, right});
            return ans;
        }
    };

    推荐用pair实现,因为pair会自动将first作第一关键字,second作第二关键字排序,这样就不用自己写个cmp函数。

  • 相关阅读:
    关于冲动 CQ
    关于在虚拟机上使用boost库 CQ
    新项目奖金分配方案 CQ
    关于桌子 CQ
    linux 添加本地yum源
    linux samba 服务器 简单配置
    linux 修改密码
    linux ntp 服务器和用户端
    linux 修改ip 地址
    Union 和 Union All 的区别
  • 原文地址:https://www.cnblogs.com/lfri/p/12711600.html
Copyright © 2011-2022 走看看