题解 | 主持人调度(二)这个题也非常有灵性 注意lambda表达式 sort的重载。

主持人调度(二)

https://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299

#include <algorithm>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型vector<vector<>> startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
     /*
     Lambda 表达式 int n = 2;

std::sort(data.begin(), data.end(),
    [n](const std::vector<int>& a, const std::vector<int>& b) {
        return a[n] < b[n];
    }
    模板:
    [capture](parameters) -> return_type { body }
    实际是一个语法糖
);
     */
    int minmumNumberOfHost(int n, vector<vector<int> >& startEnd) {
        // write code here
        long long int tmp=0;
        //一个变量记录有空闲的人 一个记录正在buzy的人
        //把开始时间从小到大排序
        //创建一个vector 记录正在忙的人上面时候忙活完。
        //优化的话 进行排序。来一个活动 更新空闲的人 看看上一轮有没有人忙完,忙完的就继续下一轮,若是空闲人数小于0,就增加人手
        //思路没有问题 优化可以使用一个小根堆。每次取出较小的那个元素比较看有没有人手空闲。若两个活动开始时间一致,那么它们在数组中肯定有先后顺序 所以从小根堆中去两次,分配两次就行了 不会影响需要的人手数目。
 //***********************************************       
        /*官解,开始时间排个序 结束时间排个序。每次开始时看有没有人手刚忙完,如果没有,就增加人手。
        看上去分开了开始结束时间 让人怀疑其正确性 但实际就是这样呀 先结束的活动不一定先开始 但既然它结束了 就必然有人手空闲。什么时候结束,人什么时候空闲,和人手有多少也没关系 因为即使人手有5个 但在这之前没有活动结束 也需要增加人手。新招了3个人在同一时间 它们结束时间不一样 但结束时间一定大于开始时间 有新活动来 还是看时间截止时几个活动结束了 但始终用一个指针记录空闲的人手的结束时间就行了。*/
        if(n==1)return 1;
        /* 数组的第一个字符排序。sort默认按字典序排序。所以默认按下标为0比较,相等就后移一位。
        sort(startEnd.begin(),startEnd.end(),[](const vector<int>& a,const vector<int>& b){return a<b;});
        注意这里的函数体内分号不能省略*/
       
        vector<int> start(n);
        vector<int> end(n);
        for(int i=0;i<n;i++){
            start[i]=startEnd[i][0];
            end[i]=startEnd[i][1];
        }
        sort(start.begin(), start.end());
        sort(end.begin(),end.end());
        int num=0;
        int j=0;//结束的数组 指针指向
        for(int i=0;i<n;i++){
            if(end[j]<=start[i]){
                j++;
            }
            else{
                num++;
            }
        }
        return num;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务