算法(31)-贪心(1)-会议室安排-C++

    会议室安排
输入:一组会议的其实终止时间比如[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();
}

 

原文链接: https://www.cnblogs.com/jasmineTang/p/14369285.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    算法(31)-贪心(1)-会议室安排-C++

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/327901

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:27
下一篇 2023年3月1日 下午4:28

相关推荐