这题最头疼的是如何给vector中的结构体排序,重载sort中自己的编写的排序函数不行,重载小于操作符不行,后来看人家的,是重载结构体中的()操作符的,可以了,之后没什么,不知道有没有O(n)的方法
// LeetCode_MergeIntervals.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
struct Interval {
int start;
int end;
Interval() : start(0), end(0) {}
Interval(int s, int e) : start(s), end(e) {}
bool operator<(const Interval &itv2) const
{
return start < itv2.start;
}
};
/*
bool operator <(const Interval &itv1,const Interval &itv2)
{
return itv1.start < itv2.start;
}
bool compare_lessthan(const Interval &itv1,const Interval &itv2)
{
return itv1.start < itv2.start;
}*/
struct comp
{
bool operator()(const Interval& lhs, const Interval& rhs) const
{
if(lhs.start != rhs.start) return lhs.start < rhs.start;
else return lhs.end < rhs.end;
}
};
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
int len = intervals.size();
if(len==0)
return ret;
sort(intervals.begin(),intervals.end(),comp());//sort(intervals.begin(),intervals.end());//sort(intervals.begin(),intervals.end(),compare_lessthan);
int startLast = intervals[0].start,endLast = intervals[0].end;
for (int i=1;i<len;i++)
{
if (intervals[i].start<=endLast)
{
endLast = intervals[i].end > endLast? intervals[i].end:endLast;
}
else
{
Interval temp(startLast,endLast);
ret.push_back(temp);
startLast = intervals[i].start;
endLast = intervals[i].end;
}
}
Interval temp2(startLast,endLast);
ret.push_back(temp2);
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<Interval> itvs;
int start,end;
while(cin>>start&&cin>>end)
{
Interval itvl(start,end);
itvs.push_back(itvl);
}
vector<Interval> ret;
ret = merge(itvs);
vector<Interval>::iterator iter = itvs.begin();
while(iter!=itvs.end())
{
cout<<iter->start<<" "<<iter->end<<endl;
iter++;
}
cout<<endl;
vector<Interval>::iterator iter2 = ret.begin();
while(iter2!=ret.end())
{
cout<<iter2->start<<" "<<iter2->end<<endl;
iter2++;
}
system("pause");
return 0;
}
网上说的有插入的做法,说是
类似于插入排序的思想
http://blog.youkuaiyun.com/ybhou/article/details/9397329 自己试了一下,他这程序的运行时间要更长。所以没怎么看。