扫描线 leetcode 759

/*
// Definition for an Interval.

class Interval {
public:
    int start;
    int end;

    Interval() {}

    Interval(int _start, int _end) {
        start = _start;
        end = _end;
    }
};
*/

class Solution {
public:
    vector<Interval*> employeeFreeTime(vector<vector<Interval*>> schedule) {
        vector<Interval*> all;
        for(auto i : schedule)
            all.insert(all.end(), i.begin(), i.end());   //将每个员工的工作区间加入到all中
        
        //将all里数据从小到大排序
        sort(all.begin(), all.end(), [](const Interval* a, const Interval* b){
            return a->start < b->start;
        });
        
        vector<Interval*> ans;
        int end = all.front()->end;
        for(auto busy : all){
            if(busy->start > end){
                busy->start;
                Interval* a = new Interval(end, busy->start); 
                ans.push_back(a);
            }
            end = max(end, busy->end);
        }
        return ans;
    }
};

参考链接:https://zxi.mytechroad.com/blog/geometry/leetcode-759-employee-free-time/

8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// Author: Huahua
// Running time: 81 ms
class Solution {
public:
    vector<Interval> employeeFreeTime(vector<vector<Interval>>& schedule) {
      vector<Interval> all;
      for (const auto intervals : schedule)
        all.insert(all.end(), intervals.begin(), intervals.end());
      std::sort(all.begin(), all.end(), 
                [](const Interval& a, const Interval& b){
                  return a.start < b.start;
                });
      vector<Interval> ans;
      int end = all.front().end;
      for (const Interval& busy : all) {
        if (busy.start > end) 
          ans.emplace_back(end, busy.start);  
        end = max(end, busy.end);
      }
      return ans;
    }
};

猜你喜欢

转载自www.cnblogs.com/Bella2017/p/11421441.html