会议室安排
输入:一组会议的其实终止时间比如[7,8],[8,10],[9,12][10,15]..就一个会议室,如何安排会议室的利用率最高。
输出:安排会议的个数,或者是安排了哪些会议。此时返回3 ,[7 8][8 10][10 15]
思路:按结束时间排序
数据多时用小根堆
上代码:
/*
贪心1 会议室安排
小根堆
*/
class Program {
public:
int m_start;
int m_end;
Program(int start, int end) {
m_start = start;
m_end = end;
}
bool operator < (const Program n) const
{
return m_end>n.m_end;
}
};
bool compUp(Program p1, Program p2)
{
return p1.m_end < p2.m_end;
}
bool compDown(Program p1, Program p2)
{
return p1.m_end >p2.m_end;
}
int bestArrange(Program inPs[], int m_num,int timepoint)
{
sort(inPs, inPs + m_num, compUp); //1.按end时间排序
for (int i = 0; i < m_num; i++)
{
cout<<"inPs[i] start="<<inPs[i].m_start<<",,,,,,end="<<inPs[i].m_end<<endl;
}
int result = 0;
cout <<"******************"<<endl;
for (int i = 0; i < m_num; i++) //2.遍历所有的会议
{
if (timepoint <= inPs[i].m_start) //3.当前时间
{
result++;
timepoint = inPs[i].m_end; //4.当前时间=会议结束时间
cout << "inPs[i] start=" << inPs[i].m_start << ",,,,,,end=" << inPs[i].m_end << endl;
}
}
return result;
}
void BestArrange_main_test()
{
Program parr[5] = { Program(7, 8),Program(8,10),Program(9, 12),Program(10,15) ,Program(7, 15)};
int m_rc = bestArrange(parr,5,7);
cout<<"返回的值:m_rc="<< m_rc<<endl;
}
void BestArrange_main()
{
cout<<"*********BestArrange_main************"<<endl;
BestArrange_main_test();
}