【数学】【排序】对若干个区间进行合并

来源:互联网 发布:nginx luajit 编辑:程序博客网 时间:2024/04/28 22:17

题目:EPI  


typedef int TimeType;class Interval{public:TimeType left,right;bool isleftclosed,isrightclosed;Interval(const TimeType &a,const TimeType &b,const bool l,const bool r):left(a),right(b),isleftclosed(l),isrightclosed(r){}bool operator<(const Interval &a){if(left!=a.left)return left<a.left;else if(isleftclosed!=a.isleftclosed)return isleftclosed;else{if(right!=a.right)return right<a.right;else if(isrightclosed!=a.isrightclosed)return isrightclosed;elsereturn false;//相等的时候返回假}}};vector<Interval> union_intervals(vector<Interval>  A){if(A.size()<=1)return A;sort(A.begin(),A.end());vector<Interval> res;Interval cur=A[0];for(int i=0;i<A.size();i++){//两个if语句的逻辑关系要理清楚if(A[i].left<cur.right || (A[i].left==cur.right && (A[i].isleftclosed || cur.isrightclosed))){if(A[i].right>cur.right || (A[i].right==cur.right && A[i].isrightclosed))//不要忘了!cur.right=A[i].right;}else{res.push_back(cur);cur=A[i];}}res.push_back(cur);//不要忘了!return res;}


0 0