贪心算法—会议安排

与其明天开始,不如现在行动!

文章目录

  • 1 安排会议
    • 1 题目描述
    • 2 解决思路
    • 3 代码实现
  • 💎总结


1 安排会议

1 题目描述

一些项目要占用一个会议室宣讲,会议室不能同时容纳两个项目的宣讲。

给你每一个项目开始的时间和结束的时间

你来安排宣讲的日程,要求会议室进行的宣讲的场次最多。

返回最多的宣讲的场次。

所有会议

2 解决思路

  1. 先用暴力方法(一定正确)
    1. 列举出每一种会议的组合
    2. 看哪个组合能安排的会议最多
  2. 贪心策略:哪个会议结束时间早就安排哪个,最后安排的数量就是结果
  3. 两个方法比较,验证贪心策略是否正确

3 代码实现

public class BestArrange {
    public static class Programs {
        public int start;
        public int end;
        public Programs(int start, int end) {
            this.start = start;
            this.end = end;
        }
    }
    
    public static int bestArrange(Programs[] programs) {
        if (programs == null || programs.length == 0) {
            return 0;
        }
        return process(programs, 0, 0);
    }

    /**
     * 暴力递归求解
     * @param programs 还剩多少会议
     * @param done 之前已经安排的会议数量
     * @param timeLine 当前的时间
     * @return 返回能安排的最多的会议数量
     */
    private static int process(Programs[] programs, int done, int timeLine) {
        if (programs.length == 0) {
            return done;
        }
        int max = done;
        for (int i = 0; i < programs.length; i++) {
            if (programs[i].start >= timeLine) {
                Programs[] next = copyButExcept(programs, i);
                max = Math.max(max, process(next, done + 1, programs[i].end));
            }
        }
        return max;
    }

    private static Programs[] copyButExcept(Programs[] programs, int i) {
        Programs[] ans = new Programs[programs.length - 1];
        int index = 0;
        for (int j = 0, programsLength = programs.length; j < programsLength; j++) {
            if (j != i) {
                ans[index++] = programs[j];
            }
        }
        return ans;
    }

    /**
     * 贪心算法
     * @param programs 总会议数
     * @return 然会能安排的最多的会议数量
     */
    public static int bestArrange2(Programs[] programs) {
        Arrays.sort(programs, Comparator.comparingInt(o -> o.end));
        int timeLine = 0;
        int res = 0;
        for (Programs program : programs) {
            if (program.start >= timeLine) {
                timeLine = program.end;
                res++;
            }
        }
        return res;
    }

    public static void main(String[] args) {
        Programs[] programs = new Programs[6];
        programs[0] = new Programs(8, 10);
        programs[1] = new Programs(8, 9);
        programs[2] = new Programs(10, 12);
        programs[3] = new Programs(12, 13);
        programs[4] = new Programs(10, 13);
        programs[5] = new Programs(9, 10);

        if (bestArrange(programs) == bestArrange2(programs)) {
            System.out.println("Finish!");
        }else {
            System.out.println("Oops!");
        }
    }
}

💎总结

本文中若是有出现的错误请在评论区或者私信指出,我再进行改正优化,如果文章对你有所帮助,请给博主一个宝贵的三连,感谢大家😘!!!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/279636.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MendelianRandomization | 孟德尔随机化神包更新啦!~(一)(小试牛刀)

1写在前面 今天发现MendelianRandomization包更新v0.9了。&#x1f61c; 其实也算不上更新。&#x1fae0; 跟大家一起分享一下这个包做MR的用法吧。&#x1f929; 还有一个包就是TwoSampleMR&#xff0c;大家有兴趣可以去学一下。&#x1f605; 2用到的包 rm(list ls())# ins…

壮志酬筹>业务被裁>副业转正>收入回正。一个前黑马程序员老师的2023

从年初时的踌躇满志&#xff0c;到年中时整个业务线被砍。全职做前端训练营&#xff0c;四个多月的时间帮助100多名同学拿到了满意的offer&#xff0c;同时也让我的收入重归正轨。仅以这个视频记录我&#xff0c;一个普通程序员的 2023 。 视频版可直接访问 Hello&#xff0c;大…

【年度征文】回顾2023,迎接2024

转眼一年~~2023又到年底了&#xff0c;CSDN年度征文如约而至&#xff01;不知不觉又在CSDN平台写了488篇博文&#xff0c;非常感谢CSDN提供的平台&#xff0c;同时也感谢关注和支持博主的粉丝们&#xff0c;在马上到来新的一年里&#xff0c;我会继续努力&#xff01;也非常感谢…

mysql突然找不到,任务管理器里也没有了(图文详细解决)

右键开始键&#xff0c;选终端&#xff08;管理员&#xff09; 2.点↓的命令提示符&#xff0c;进到以管理员打开命令指示符 3.输入命令&#xff1a; mysqld.exe -install 如果出现这个Service successfully installed. 就代表成功了 4.输入&#xff1a; net start mysql MySO…

如何解决“电脑缺失msvcp110.dll”错误,msvcp110.dll文件解决方法

“msvcr110.dll丢失”。那么&#xff0c;msvcr110.dlll丢失到底是什么意思呢&#xff1f;它对我们的电脑有什么影响&#xff1f;本文将详细介绍msvcr110.dll的作用以及msvcr110.dll丢失对电脑的影响&#xff0c;并提供5个解决方案来解决这个问题。 一、msvcr110.dll的作用 ms…

【三维目标检测/自动驾驶】IA-BEV:基于结构先验和自增强学习的实例感知三维目标检测(AAAI 2024)

系列文章目录 论文&#xff1a;Instance-aware Multi-Camera 3D Object Detection with Structural Priors Mining and Self-Boosting Learning 地址&#xff1a;https://arxiv.org/pdf/2312.08004.pdf 来源&#xff1a;复旦大学 英特尔Shanghai Key Lab /美团 文章目录 系列文…

交互式笔记Jupyter Notebook本地部署并实现公网远程访问内网服务器

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 1.前言2.Jupyter Notebook的安装2.1 Jupyter Notebook下…

Java guava partition方法拆分集合自定义集合拆分方法

日常开发中&#xff0c;经常遇到拆分集合处理的场景&#xff0c;现在记录2中拆分集合的方法。 1. 使用Guava包提供的集合操作工具栏 Lists.partition()方法拆分 首先&#xff0c;引入maven依赖 <dependency><groupId>com.google.guava</groupId><artifa…

Leetcode算法系列| 10. 正则表达式匹配

目录 1.题目2.题解C# 解法一&#xff1a;分段匹配法C# 解法二&#xff1a;回溯法C# 解法三&#xff1a;动态规划 1.题目 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 1.‘.’ 匹配任意单个字符 2.‘.’ 匹配任意单个字…

SimpleCG小游戏开发系列(2)--贪吃蛇

一、前言 在之前的C语言小游戏开发系列我们已经介绍了扫雷游戏的开发&#xff0c;本篇我们继续此系列第二篇&#xff0c;同样是比较简单但好玩的一个游戏--贪吃蛇。因为有了之前的游戏框架&#xff0c;我们只需要直接搬来原来的框架即可&#xff0c;可以省去不少活。 先看看游…

布隆过滤器-使用原理和场景

一、概述 布隆过滤器&#xff08;Bloom Filter&#xff09;主要用来检索一个元素是否在一个集合中。它是一种数据结构bitMap,优点是高效的插入和查询&#xff0c;而且非常节省空间。缺点是存在误判率和删除困难。 二、应用场景 1、避免缓存穿透&#xff0c;当redis做缓…

图像的颜色及Halcon颜色空间转换transfrom_rgb/trans_to_rgb/create_color_trans lut

图像的颜色及Halcon颜色空间转换 文章目录 图像的颜色及Halcon颜色空间转换一. 图像的色彩空间1. RGB颜色 2. 灰度图像3. HSV/ HSI二. Bayer 图像三. 颜色空间的转换1. trans_from_rgb算子2. trans_to_rgb算子3. create_color_trans_lut算子 图像的颜色能真实地反映人眼所见的真…

C++的面向对象学习(7):面向对象编程的三大特性之:继承

文章目录 前言一、继承&#xff1a;继承的类除了拥有上一级类的共性&#xff0c;也拥有自己的特性。二、继承方式&#xff1a;公有继承&#xff08;public inheritance&#xff09;、私有继承&#xff08;private inheritance&#xff09;和保护继承&#xff08;protected inhe…

JavaScript基础知识点总结:从零开始学习JavaScript(六)

本章内容主要让小伙伴们自主练习 &#xff0c;建议大家先自己写出来答案&#xff0c;然后对照我的&#xff01;&#xff08;题不难主要培养自己的编程思维&#xff01;&#xff01;&#xff01;&#xff09; 如果大家感感兴趣也可以去看&#xff1a; &#x1f389;博客主页&…

matlab导出高清图片,须经修改后放入latex(例如添加文字说明,matlab画图不易操作)

一、背景 我们在写文章时&#xff0c;使用matlab画图后&#xff0c;如果不需要对图片进行额外修改或调整&#xff0c;例如添加文字说明&#xff0c;即可直接从matlab导出eps格式图片&#xff0c;然后插入到latex使用。 通常latex添加图片&#xff0c;是需要eps格式的。 但很…

两种汇编的实验

week04 一、汇编-1二、汇编-2 一、汇编-1 1 通过输入gcc -S -o main.s main.c -m32 将下面c程序”week0401学号.c“编译成汇编代码 int g(int x){ return x3; } int f(int x){ int i 学号后两位&#xff1b; return g(x)i; } int main(void){ return f(8)1; } 2. 删除汇编代码…

vr体验馆用什么软件计时计费,如遇到停电软件程序如何恢复时间

vr体验馆用什么软件计时计费&#xff0c;如遇到停电软件程序如何恢复时间 一、软件程序问答 如下图&#xff0c;软件以 佳易王vr体验馆计时计费软件V17.9为例说明 1、软件如何计时间&#xff1f; 点击相应编号的开始计时按钮即可 2、遇到停电再打开软件时间可以恢复吗&…

跨域是什么,如何解决跨域

文章目录 前言一、 什么是跨域&#xff1f;二、常见跨域问题三、如何解决跨域如何解决跨域&#xff08;方式&#xff09;前端解决跨域问题CORS反向代理JSONP 总结 前言 跨域是在开发中经常遇到的问题&#xff0c;那什么是跨域呢&#xff1f;及常见跨域的处理方案有哪些呢&…

深入了解云原生:定义与特征解析

文章目录 一、云原生概述1.1 什么是云原生1.2 云原生组成要素1.3 补充资料 二、云原生的目标2.1 云原生关键目标2.2 云原生特性 三、云原生应用 VS 传统单体应用参考资料 一、云原生概述 1.1 什么是云原生 (1)云原生定义 云原生(Cloud Native) 是一种软件架构和开发方法论&a…

D1671 75Ω视频放大驱动芯片 ,2.8~5.5V 应用于手持设备中 内 置 SAG端 子 6dB放 大 器 电 路

D1671 是 一 块 带 4 级 低 通 滤 波 的 单 通 道 视 频 放 大 电 路 &#xff0c; 可 在 3V 或 5V的 低 电 压 下 工 作 。 该 电 路 用 在 有 TV 影 象 输 出 功 能 的 产 品 上 面 &#xff0c; 比 如 机 顶 盒 &#xff0c;监 控 摄 象 头 &#xff0c;DVD &#xff1b;此 …