区间合并
总结一个写法:
`int st = 1e8, ed = -1e8;//确保第一个区间一定小于初始值
sort(segs.begin(), segs.end());
st = segs[0].first;//因为已经排过序了,所以第一个区间的左端点是最小的
bool sign = true;//标记一下是否可以合并
for (auto seg : segs)
{
if (st > seg.first) st = seg.first;
if (ed < seg.first && ed != -1e8) {//如果有某个区间的右端点小于它的下一个区间的左端点那就表示不能合并
cout << "no" << endl;
sign = false;//标记一下然后退出循环
break;
}
else {
ed = seg.second;
}
}`
这里为什么不直接用已经排过序的第一个区间做初始值,而是设了st ed来确保最小。我认为是为了保证程序的一致性,对于整个数组来说,每一个区间都是平等的,不应该有一个特殊的成为初始值,
这样写可以使数组从头遍历到尾,更加一致连贯。
额(⊙﹏⊙)经检查 if (st > seg.first) st = seg.first;这行没用,不执行,可以直接删去,因为已经把st设为st = segs[0].first;