当前位置: 首页 > news >正文

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

描述

有 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: 若是出现之前活动结束时间晚于当前活动开始时间的,则需要增加主持人。

代码:

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;}
}


http://www.mrgr.cn/news/970.html

相关文章:

  • 雅思小作文写作技巧
  • 九大服务架构性能优化方式
  • 解密!抖音百万粉丝博主三维地图视频都用到了什么GIS数据和技术
  • MySQL中处理JSON数据:大数据分析的新方向
  • Docker安全与资源
  • 打卡学习Python爬虫第三天|python的re模块的使用
  • xss.function靶场(easy)
  • css实现水滴效果图
  • 电磁手术导航系统市场报告:未来几年年复合增长率CAGR为6.1%
  • 力扣面试经典算法150题:轮转数组
  • 如何保证Redis缓存和数据库的数据一致性
  • 简易双端视频通信实现
  • 16.FreeRTOS内存管理
  • 基于SpringBoot的论坛系统设计与实现(源码+lw+部署文档+讲解等)
  • 正则表达式入门:Python ‘ re ‘ 模块详解
  • TCP/IP 协议及其协议号
  • Java-HttpURLConnection 从服务器获取输入流和使用RestTemplate来获取输入流。
  • 一个简单的WEB开发案例
  • 7.实时时钟(RTC)
  • 深入解析CDN(内容分发网络):架构、优势与实现