中级农民
- 积分
- 113
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2015-6-24
- 最后登录
- 1970-1-1
|
vector<Interval> merge(vector<Interval>& intervals) {
if (intervals.size() == 0){
return{};
}
//sort(intervals.begin(), intervals.end());
sortIntervals(intervals, 0, intervals.size() - 1);
vector<Interval> vec = {};
int start = intervals[0].start;
int end = intervals[0].end;
for (int i = 0; i < int(intervals.size()); i++){
if (intervals[i].start > end){
vec.push_back(Interval(start, end));
start = intervals[i].start;
end = intervals[i].end;
}
else if (intervals[i].end > end){
end = intervals[i].end;
}
}
vec.push_back(Interval(start, end));
return vec;
}
void sortIntervals(vector<Interval> & intervals, int p, int q){
int i = p;
int j = q-1;
while (i < j){
while (intervals[i].start < intervals[q].start){
i++;
}
while (intervals[j].start > intervals[q].start){
j--;
}
if (i < j){
Interval tmp = intervals[i];
intervals[i] = intervals[j];
intervals[j] = tmp;
i++;
j--;
}
}
if (intervals[j].start > intervals[q].start){
Interval tmp = intervals[q];
intervals[q] = intervals[j];
intervals[j] = tmp;
}
if ((j-1) > p){
sortIntervals(intervals, p, j-1);
}
if ((j+1) < q){
sortIntervals(intervals, j, q);
}
|
|