贪心算法-会议室问题

2023-09-21 20:49:11

1、题目描述
一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目。现在给你两个长度一样的数组,starts数组代码每个会议开始的时间,ends数组代表每个会议结束的时间。
在给你一个当前时间,请你求出当日可以利用会议室宣讲的最大值

思路分析:
1.按照最早开始的会议排序,最早开始的优先。
2.按照最短时间排序,时间最短的优先。
3.按照最早结束排序,最早结束的优先。
贪心算法是纯粹的积累经验类型的算法思想,贪心策略的正确性证明是非常困难的,几乎不可能证明正确性,因此,只能通过对数器进行验证。同时,可以举反例排除错误的贪心策略。
比如上面的:
1.如果最早开始的会议时间是最长呢?直接怼一天的话,显然不合理对吧?
2.如果最短的会议在中间呢?导致它前面的时间浪费了,后面的时间可能正好差一点不够一个会议,这样也很浪费,肯定不是最优解。
因此,排除掉1和2,此题的最优贪心算法应该就是3。

解题思路:
是按照项目完成时间,从前到后排序,先做最早结束的项目,然后淘汰掉不能再做的项目

public static class Program {
   public int start;
   public int end;

   public Program(int start, int end) {
      this.start = start;
      this.end = end;
   }
}
// 会议的开始时间和结束时间,都是数值,不会 < 0
public static int bestArrange2(Program[] programs) {
   Arrays.sort(programs, new ProgramComparator());
   int timeLine = 0;
   int result = 0;
   // 依次遍历每一个会议,结束时间早的会议先遍历
   for (int i = 0; i < programs.length; i++) {
      if (timeLine <= programs[i].start) {
         result++;
         timeLine = programs[i].end;
      }
   }
   return result;
}

public static class ProgramComparator implements Comparator<Program> {

   @Override
   public int compare(Program o1, Program o2) {
      return o1.end - o2.end;
   }

}

更多推荐

机器学习中分类问题的初步

分类任务做人脸辨识也可以是分类,手写字识别也可以是用回归来预测分类,因为回归会惩罚那些太正确的分类,反而得到的结果是不好的,还有一个问题如果你把class1当作1,class2当作2,class3当3,这样做就相当于默认了class12相近二元分类的任务的步骤类别的个数的概率水系中某一个品种的概率如果找到了高斯分布就可

JavaScript学习笔记04

JavaScript笔记04方法定义方法当一个函数是一个对象的属性时,称之为方法。例:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><script>letperson={name:"张三",birthday:200

JavaScript之观察者模式

本文作者为360奇舞团前端开发工程师概述在日常开发中,开发人员经常使用设计模式来解决软件设计中的问题。其中,观察者模式是一种常用的模式,它可以帮助开发人员更好地处理对象之间的通信。在JavaScript中,观察者模式的应用非常广泛,可以用于实现事件处理、数据绑定等功能。本文将介绍观察者模式的基本概念和实现方式。什么是观

大数据之Hadoop

大数据按顺序给出数据存储单位:bit、Byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB。1Byte=8bit1K=1024Byte1MB=1024K1G=1024M1T=1024G1P=1024THadoopHadoop是一个能够对大量数据进行分布式处理的软件框架。分布式处理是指:比如有100

苹果CMS主题 MXonePro二开优化修复开源版影视网站源码

MXPro模板主题(又名:mxonepro)是一款基于苹果cms程序的一款全新的简洁好看UI的影视站模板类似于西瓜视频,不过同对比MxoneV10魔改模板来说功能没有那么多,也没有那么大气,但是比较且可视化功能较多简洁且有周更记录样式等多功能后台设置,类似预mxone魔改版的预告片功能,用来做影视站模板也是极好的,但之

【go语言】条件,选择,循环和特殊语句

if语句a:=10ifa>20{fmt.Printf("a大于20")}elseifa<10{fmt.Printf("a小于10")}else{fmt.Printf("a大于等于10,a小于等于20")}go语言的if语句和C语言的if语句的差不多,需要注意的是else和elseif要写在括号右边;go语言的if语句还

golang http

函数说明http.ServeMux是Go语言标准库中的一个多路复用器(multiplexer)。它用于路由和处理HTTP请求,将请求分发到相应的处理器函数。http.HandleFunc是Go语言标准库中的一个函数,用于注册处理器函数来处理HTTP请求。它是对http.ServeMux的简化封装,方便快速实现路由功能。

微信小程序通过 wxministore 实现类似于vuex的全局装填数据管理

首先我们打开终端引入依赖npminstallwxministore--save然后如果你是新版开发者工具就npmi构建一下如果你是老版本的微信开发者工具就打开右上角详情选择本地管理勾选使用npm模块然后在根目录下创建一个store.js当然建在哪是你自己决定的反正后面能引入到就好然后store.js编写代码如下impo

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及审计监督要求;通过电子化平台提高招投标工作的公开性和透明性;通过电子化招投标,使得招标采购的质量更高、速度

MyBatis 缓存模块

文章目录前言缓存的实现Cache接口PerpetualCache缓存的应用缓存对应的初始化一级缓存二级缓存第三方缓存前言MyBatis作为一个强大的持久层框架,缓存是其必不可少的功能之一,Mybatis中的缓存分为一级缓存和二级缓存。但本质上是一样的,都是使用Cache接口实现的。缓存的实现Cache接口Cache接口

WebGL 初始化着色器

目录前言初始化着色器的7个步骤创建着色器对象(gl.createShader())gl.createShader()规范gl.deleteShader()规范指定着色器对象的代码(gl.shaderSource())gl.shaderSource()规范编译着色器(gl.compileShader())gl.compi

热文推荐