题目背景: 那一年,这一年,青春散场,到毕业季,我们奔波着忙着找工作,来到招聘会上,看到黑压压的一大片人群.. 题目描述:毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完整的参加多少个招聘会(参加一个招聘会的时候不能中断或离开)。 假设现在有n个招聘会,每个招聘会都有个起止时间,时间由从招聘会第一天0点开始的小时数表示,n <= 1000 。 返回:最多参加的招聘会的个数n。 举个例子: 现在有3场招聘会,他们的起始时间为: 9-10 10-20 8-15 返回:2
这是英雄会的一个挑战题
下面是个人的实现方法,仅供参考,如有bug或者意见欢迎提出,共同交流
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(const pair<int,int> &tmpa,const pair<int,int> &tmpb )
{
if (tmpa.second<tmpb.second)
{
return 1;
}
else if (tmpa.second==tmpb.second)
{
if (tmpa.first<tmpb.first)
{
return 1;
}
else
return false;
}
else
return 0;
// return tmpa.second<tmpb.second;
}
int forjob(vector<pair<int,int> > &time)
{
sort(time.begin(),time.end(),cmp);
//返回能参加的招聘个数的数值n
int countNum=0;
int endNum=-1;
int SizeNum=time.size();
for (int i=0;i<SizeNum;i++)
{
if (endNum<=time[i].first)
{
endNum=time[i].second;
countNum++;
}
}
return countNum;
}
bool operator<(const pair<int,int> &tmpa,const pair<int,int> &tmpb)
{
if (tmpa.second<tmpb.second)
{
return true;
}
else if (tmpa.second==tmpb.second)
{
if (tmpa.first<tmpb.first)
{
return true;
}
}
else
return false;
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<pair<int,int> > TimePair;
pair<int,int> num1(2,8);
pair<int,int> num2(3,4);
pair<int,int> num3(2,5);
pair<int,int> num4(5,8);
pair<int,int> num5(8,20);
TimePair.push_back(num4);
TimePair.push_back(num1);
TimePair.push_back(num2);
TimePair.push_back(num3);
TimePair.push_back(num5);
int Num=forjob(TimePair);
cout<<Num<<endl;
return 0;
}