小肥的面经,小肥的代码:http://collabedit.com/gmysb
|
第二个解法简直是精典!
struct Meeting{
double start;
double end;
}
struct CompI{
bool operator()(const Meeting& meet1, const Meeting meet2)
return meet1.start < meet2.start;
}
bool CheckMeetOverlap(vector<Meeting>& meetings){
int num = meetings.size();
if (num<=1)
return true;
sort(meetings.begin(),meetings.end(),CompI);
for(int i = 1; i< num; i++){
if (meetings[i].start < meetings[i-1].end)
return false;
}
return true;
}
//second question
struct MeetingTimePoint{
double time;
bool isStart;
MeetingTimePoint(double time_input, bool isStart_input):time(time_input),isStart(isStart_input){};
}
struct CompII{
bool operator()(const MeetingTimePoint& meeting1, const MeetingTimePoint& meeting2){
return meeting1.time<meeting2.time;
}
}
int minRoom(vector<Meeting>& meetings){
int num = meetings.size();
if (num<=1)
return num;
vector <MeetingTimePoint> meetingInfo;
for(int i = 0; i< num; i++){
MeetingTimePoint current_start = MeetingTimePoint (meetings[i].start, true);
MeetingTimePoint current_end = MeetingTimePoint (meetings[i].start, false);
meetingInfo.push_back(current_start);
meetingInfo.push_back(current_end);
}
sort(meetingInfo.begin(),meetingInfo.end,CompII);
int currentRoom = 0;
int minRoom = 0;
for(int i = 0; i<meetingInfo.size(); i++){
if (meetingInfo[i].isStart == true)
currentRoom++;
else
currentRoom--;
minRoom = max(minRoom, currentRoom);
}
return minRoom;
}