编辑代码

#include <algorithm>
#include <iostream>
#include <vector>
#include <climits>
using namespace std;

// 区间结构体
struct Interval {
    int start;
    int end;
    Interval(int s, int e) : start(s), end(e) {}
};

bool compareByEnd(const Interval& a, const Interval& b) {
    return a.end < b.end;
}

vector<Interval> intervalCover(vector<Interval>& intervals) {
    vector<Interval> result;

    // 按照区间的结束位置进行升序排序
    sort(intervals.begin(), intervals.end(), compareByEnd);

    // 初始化当前已选择区间的结束位置
    int end = INT_MIN;

    // 遍历区间列表
    for (auto& interval : intervals) {
        // 当前区间的开始位置在已选择区间的结束位置之后,加入结果集合,更新结束位置
        if (interval.start > end) {
            result.push_back(interval);
            end = interval.end;
        }
    }
    return result;
}

int main() {
    vector<Interval> intervals = {{1, 4},  {2, 6},  {5, 7},
                                  {8, 11}, {9, 12}, {10, 14}};
    vector<Interval> result = intervalCover(intervals);
    cout << "选择区间为: ";
    for (auto& interval : result) {
        cout << "[" << interval.start << ", " << interval.end << "] ";
    }
    cout << endl;
    return 0;
}