给出一个区间的集合,请合并所有重叠的区间。
示例 1:
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/merge-intervals
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
bool isCanMerge(vector<int> &merge1, vector<int> &merge2)
{
if (merge1.size() != 2 || merge2.size() != 2)
{
return false;
}
if (merge1[1] < merge2[0])
{
return false;
}
return true;
}
static bool myfunc(vector<int> &vi, vector<int> &vj)
{
return vi[0] < vj[0];
}
vector<vector<int>> merge(vector<vector<int>>& intervals) {
if (intervals.size() <= 1)
{
return intervals;
}
std::sort(intervals.begin(), intervals.end(), myfunc);
vector<vector<int>>::iterator itrPre = intervals.begin();
vector<vector<int>>::iterator itrEnd = intervals.begin();
itrEnd++;
vector<vector<int>> vect;
vector<int> temp = *itrPre;
while (itrEnd != intervals.end())
{
if (isCanMerge(temp, *itrEnd))
{
temp[0] = (temp[0] < (*itrEnd)[0]) ? temp[0] : (*itrEnd)[0];
temp[1] = (temp[1] > (*itrEnd)[1]) ? temp[1] : (*itrEnd)[1];
itrEnd++;
}
else
{
vect.push_back(temp);
temp.clear();
temp.push_back((*itrEnd)[0]);
temp.push_back((*itrEnd)[1]);
itrEnd++;
}
}
if (!temp.empty())
{
vect.push_back(temp);
}
return vect;
}
};