后端开发刷题 | 主持人调度【贪心算法】

描述

有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。

示例1

输入:

复制代码
2,[[1,2],[2,3]]

返回值:

复制代码
1

说明:

复制代码
只需要一个主持人就能成功举办这两个活动      

示例2

输入:

复制代码
2,[[1,3],[2,4]]

返回值:

复制代码
2

说明:

复制代码
需要两个主持人才能成功举办这两个活动  

思路分析:

贪心思想属于动态规划思想中的一种,其基本原理是找出整体当中给的每个局部子结构的最优解,并且最终将所有的这些局部最优解结合起来形成整体上的一个最优解。

利用贪心思想,什么时候需要的主持人最少?那肯定是所有的区间没有重叠,每个区间首和上一个的区间尾都没有相交的情况,我们就可以让同一位主持人不辞辛劳,一直主持了。但是题目肯定不是这种理想的情况,那需要对交叉部分,判断需要增加多少位主持人。

具体做法:

  • step 1: 利用辅助数组获取单独各个活动开始的时间和结束时间,然后分别开始时间和结束时间进行排序,方便后面判断是否相交。
  • step 2: 遍历nn个活动,如果某个活动开始的时间大于之前活动结束的时候,当前主持人就够了,活动结束时间往后一个。
  • step 3: 若是出现之前活动结束时间晚于当前活动开始时间的,则需要增加主持人。

代码:

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 计算成功举办活动需要多少名主持人
     * @param n int整型 有n个活动
     * @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间
     * @return int整型
     */
    public int minmumNumberOfHost (int n, int[][] startEnd) {
        int[] start=new int[n];
        int[] end=new int[n];
        for(int i=0;i<n;i++){
            start[i]=startEnd[i][0];
            end[i]=startEnd[i][1];
        }
        Arrays.sort(start);
        Arrays.sort(end);
        int re=0,j=0;
        for(int i=0;i<n;i++){
            //如果结束节目的时间大于新开始节目的时间,就要增加一名主持人
            if(end[j]>start[i]){
                re++;
            }else{
                j++;
            }
        }
        return re;
    }
}
相关推荐
weixin_BYSJ19872 分钟前
springboot医疗信息管理系统---附源码17465
java·javascript·spring boot·python·django·flask·php
阳明山水7 分钟前
销量预测的“隐形杀手”:概念漂移与自适应学习实战
人工智能·深度学习·算法·机器学习·架构
xqqxqxxq9 分钟前
吃透 Spring 高频注解(包含SpringMVC Spring Boot)
java·spring boot·spring
都叫我大帅哥10 分钟前
Embabel 1.0 Agent Framework 完全指南:从入门到生产级实践
java
程序员爱钓鱼11 分钟前
Rust Borrow借用详解:不转移所有权访问数据
后端·面试·rust
szarron12 分钟前
HT666 0.6-6GHz 定向高增益手持天线:EMC 测试与频谱定位实战指南
网络·算法·5g·信号处理·射频工程·频谱仪
福大大架构师每日一题16 分钟前
agno v2.8.7 发布:顾问模型、精准路线、调度能力全面升级,10项关键修复一次看懂
java·开发语言·数据库
liulilittle23 分钟前
反量化:反量化Q8零(q8_0)
人工智能·算法·机器学习·ai·llm
老洋葱Mr_Onion25 分钟前
【C++】CSP-J复赛dp问题(含模板题)
开发语言·c++
青 春 记 忆7 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解
python·算法·leetcode·链表