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

(算法)区间调度问题

               问题大致如下所述:有n项工作,每项工作分别在s时间开始,在t时间结束. 对于每项工作,你都可以选择参与与否,如果选择了参与,那么自始至终都必须全程参与.    
        此外,参与工作的时间段不能重复(即使是开始的瞬间和结束的瞬间的重叠也是不允许的).  你的目标是参与尽王多的工作,那么最多能参与多少项工作呢?

        问题解决思路:通过排序确定从小到大的开始时间,如选择第一个工作,即看事件谁的结束时间最小。再次选择下一个工作(即第二个工作),则判断第一个工作结束时间必须大于第二个工作开始时间,且结束时间小的先安排上。如此类推。

代码:

import java.util.Arrays;
import java.util.Scanner;public class qujian {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] s = new int[n];   //创建两个数组 s 和 t,分别存储每个任务的开始时间和结束时间int[] t = new int[n];Job[] jobs = new Job[n];    //创建一个 Job 数组 jobs,将每个任务的开始时间和结束时间封装成 Job 对象,方便进行排序。for (int i = 0; i < n; i++) {s[i] = sc.nextInt();}for (int i = 0; i < n; i++) {t[i] = sc.nextInt();}for (int i = 0; i < n; i++) {jobs[i] = new Job(s[i], t[i]);}Arrays.sort(jobs);int res = f(n, jobs);System.out.println(res);}private static int f(int n, Job[] jobs) {int cnt = 1;int y = jobs[0].t;  // y 为当前任务的结束时间for (int i = 0; i < n; i++) {if (jobs[i].s > y) {cnt++;      //如果当前任务的开始时间大于 y,则说明可以完成这个任务,// cnt 加 1,并更新 y 为当前任务的结束时间y = jobs[i].t;}}return cnt;}private static class Job implements Comparable<Job> {int s;int t;public Job(int s, int t) {this.s = s;this.t = t;}@Overridepublic int compareTo(Job other) {int x = this.t - other.t;if (x == 0)return this.s - other.s;elsereturn x;}}
}

相关文章:

  • electron 的nsis配置
  • myeclipse开发ssm框架项目图书管理系统 mysql数据库web计算机毕业设计项目
  • 高数知识补充----矩阵、行列式、数学符号
  • 『 Linux 』简单日志插件
  • IDEA自带的Maven 3.9.x无法刷新http nexus私服
  • Ubuntu 24.04安装Jellyfin媒体服务器图解教程
  • 【大型实战】企业网络实验(华为核心交换、ESXI7.0vmware虚拟机、DHCP中继、服务端网络及用户端网络配置)
  • 【JAVA poi-tl-ext 富文本转word】
  • GuLi商城-商品服务-API-品牌管理-JSR303自定义校验注解
  • 【JVM实战篇】内存调优:内存问题诊断+案例实战
  • 微调 Florence-2 - 微软的尖端视觉语言模型
  • 6.Dockerfile及Dockerfile常用指令
  • Windows与Ubuntu安装ffmpeg
  • 【Linux】调试器 gdb使用
  • 各个系统配置端口转发
  • 【5+】跨webview多页面 触发事件(二)
  • 4. 路由到控制器 - Laravel从零开始教程
  • 77. Combinations
  • Fundebug计费标准解释:事件数是如何定义的?
  • miaov-React 最佳入门
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • SpringCloud集成分布式事务LCN (一)
  • Vue实战(四)登录/注册页的实现
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 排序算法学习笔记
  • 提醒我喝水chrome插件开发指南
  • 详解移动APP与web APP的区别
  • C# - 为值类型重定义相等性
  • gunicorn工作原理
  • ​Redis 实现计数器和限速器的
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #pragma 指令
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (js)循环条件满足时终止循环
  • (python)数据结构---字典
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (力扣)1314.矩阵区域和
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)模仿学习-完成后台管理页面查询
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .gitignore文件使用
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET中的Exception处理(C#)
  • // an array of int
  • @ModelAttribute 注解
  • @Transient注解