第十五节:贪心算法(下)

一 、 贪心算法的解题套路实战一(最多的会议宣讲场次)

1.1 描述

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

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

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

返回最多的宣讲场次。

1.2 分析 在绝对环境下选择最优解

贪心 先按会议结束时间排序,然后在在数组里面找,先以前开始时间为0,找第一个会议可以结束的时间更新会议下一个可以开始的时间为当前这个会议的结束时间,那么下一个会议可以开始的时间要大于前面那个结束的时间

1.3 代码

// 会议的开始时间和结束时间,都是数值,不会 < 0public 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> {@Overridepublic int compare(Program o1, Program o2) {return o1.end - o2.end;}}

二 、 贪心算法的解题套路实战二(分割的最小代价)

2.1 描述

一块金条切成两半,是需要花费和长度数值一样的铜板的。

比如长度为20的金条,不管怎么切,都要花费20个铜板。 一群人想整分整块金条,怎么分最省铜板?

例如,给定数组{10,20,30},代表一共三个人,整块金条长度为60,金条要分成10,20,30三个部分。

如果先把长度60的金条分成10和50,花费60;

再把长度50的金条分成20和30,花费50;

一共花费110铜板。

但如果先把长度60的金条分成30和30,花费60;再把长度30金条分成10和20, 花费30;一共花费90铜板。

输入一个数组,返回分割的最小代价。

2.2 分析

贪心算法解决输入一个数组返回金条分割的最小代价既哈夫曼树

分析

根据上面的列子可以看出,切的时候尽可能的向平均靠近,之后的切的代价就越小

流程 使用小跟堆,每次从堆里面弹出两个树合完放入小根堆,等堆排好序后又弹出两个树,当小跟堆里面只剩一个树的时候停止,形成如下的树的方案就是最优方案,代价就是圈里面的值加起来-这就是在创建一棵哈夫曼树!

2.3 代码

public static int lessMoney2(int[] arr) {PriorityQueue<Integer> pQ = new PriorityQueue<>();for (int i = 0; i < arr.length; i++) {pQ.add(arr[i]);}int sum = 0;int cur = 0;while (pQ.size() > 1) {cur = pQ.poll() + pQ.poll();sum += cur;pQ.add(cur);}return sum;}

三  贪心算法的解题套路三 (根据下面的描述你最后获得的最大钱数)

3.1 描述

输入: 正数数组costs、正数数组profits、正数K、正数M

costs[i]表示i号项目的花费

profits[i]表示i号项目在扣除花费之后还能挣到的钱(利润)

K表示你只能串行的最多做k个项目

M表示你初始的资金

说明: 每做完一个项目,马上获得的收益,可以支持你去做下一个项目。只能窜行的做项目,不能并行的做项目。

输出:你最后获得的最大钱数。
 

3.2 分析

第一步 第一轮

分析先把所有数据按照花费放到小根堆里面,然后再来一个大根堆,按照利润来组织;假如我的钱是2元,小根堆里面所有能做的项目弹出来进大根堆;(1,3)(2,5)弹出进大根堆在大根堆里面是(2,5)(1,3)这个时候做要做的项目就是大根堆的堆顶;这个时候的利润就是2(本金)+5(利润)=7,

第二轮来了,接着第一轮的过程,从小根堆里面弹出7元能做的项目到大根堆里面;

第二轮

根据钱数去解锁小根堆,到大根堆做堆顶的树,一直循环

3.3 代码

package class14;import java.util.Comparator;
import java.util.PriorityQueue;public class Code04_IPO {// 最多K个项目// W是初始资金// Profits[] Capital[] 一定等长// 返回最终最大的资金public static int findMaximizedCapital(int K, int W, int[] Profits, int[] Capital) {PriorityQueue<Program> minCostQ = new PriorityQueue<>(new MinCostComparator());PriorityQueue<Program> maxProfitQ = new PriorityQueue<>(new MaxProfitComparator());for (int i = 0; i < Profits.length; i++) {minCostQ.add(new Program(Profits[i], Capital[i]));}for (int i = 0; i < K; i++) {while (!minCostQ.isEmpty() && minCostQ.peek().c <= W) {maxProfitQ.add(minCostQ.poll());}if (maxProfitQ.isEmpty()) {return W;}W += maxProfitQ.poll().p;}return W;}public static class Program {public int p;public int c;public Program(int p, int c) {this.p = p;this.c = c;}}public static class MinCostComparator implements Comparator<Program> {@Overridepublic int compare(Program o1, Program o2) {return o1.c - o2.c;}}public static class MaxProfitComparator implements Comparator<Program> {@Overridepublic int compare(Program o1, Program o2) {return o2.p - o1.p;}}}

四 墙 路问题,需要多少灯

4.1 描述

给定一个字符串str,只由‘X’和‘.’两种字符构成。

‘X’表示墙,不能放灯,也不需要点亮

‘.’表示居民点,可以放灯,需要点亮

如果灯放在i位置,可以让i-1,i和i+1三个位置被点亮

返回如果点亮str中所有需要点亮的位置,至少需要几盏灯

4.1 分析

4.2 代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS)——动漫哆啦A梦网页(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有3个页面。 二、作品演示 三、代…

Mongo关联查询两张表中分别满足某些条件的记录

如果是在mysql里面&#xff0c;这个查起来就很方便&#xff0c;但是&#xff0c;在mongo里面的话&#xff0c;查询起来就没这么方便了。 如果使用付费版的Studio 3T工具的话&#xff0c;也可以像使用mysql一样查询mongo数据&#xff0c;但是免费版不支持sql的用法&#xff0c;只…

Python---Pandas万字总结(1)

Pandas基础-1 Pandas 是 一个强大的分析结构化数据的工具集。Pandas 以 NumPy 为基础&#xff08;实现数据存储和运算&#xff09;&#xff0c;提供了专门用于数据分析的类型、方法和函数&#xff0c;对数据分析和数据挖掘提供了很好的支持&#xff1b;同时 pandas 还可以跟数…

kubeadm 在vubuntu22.04.4 server 上安装kubernetes 1.28.9

一、基础安装&#xff08;所有节点执行&#xff09;---------------------------------------- 时间同步 关闭防火墙 sudo ufw disable sudo ufw status关闭交换内存 临时关闭 sudo swapoff -a free -m永久关闭 sudo vim /etc/fstab 注释掉交换内存 转发 IPv4 并让 iptab…

云贝教育 |【好课上新】ITSS服务工程师与服务经理认证培训

课程前言 ITSS是中国电子技术标准化研究院推出的&#xff0c;包含“IT 服务工程师”和“IT 服务经理”的系列培训。有效满足GB/T 28827.1 的符合性评估要求和ITSS服务资质升级要求。 IT 服务工程师”结合 IT服务从业人员能力规范和要求&#xff0c;从服务技术、服务技巧和服务…

【Linux】调试器-gdb使用

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解Linux的编译器-gcc/g&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 1. 背景(A) 看大小(B) 查看ELF格式的文件 2.使用(A) 进入gdb(B) quit/q&#xff…

【码农日常】将mp4转换为逐帧图片

项目场景&#xff1a; 拍摄了一段视频记录设备工作的状态和测量仪器的实时数据。由于测量仪器岁数比较大&#xff0c;不够智能&#xff0c;遂打算将视频转换为逐帧图片进行分析。 网上没找到现成工具&#xff0c;借鉴网上大神的操作方式打算用python写一个工具。 问题描述 用…

一、VIsual Studio下的Qt环境配置(Visual Studio 2022 + Qt 5.12.10)

一、下载编译器Visual Studio2022和Qt 5.12.10 Visual Studio 2022 社区版就够学习使用了 Qt5.12.10 安装教程网上搜&#xff0c;一大堆 也很简单&#xff0c;配置直接选默认&#xff0c;路径留意一下即可 二、配置环境 Ⅰ&#xff0c;配置Qt环境变量 系统变量下的Path&a…

【DevOps】深入解析 Docker日志分析和服务故障排除技巧

在今天的云计算和微服务架构中&#xff0c;Docker凭借其轻量级和高效的容器化技术&#xff0c;已成为软件部署不可或缺的一部分。然而&#xff0c;随着应用复杂性的增加&#xff0c;有效的日志管理和故障排除能力成为了开发者和运维人员必须掌握的核心技能。本文将带你深入探索…

AI办公自动化-用kimi自动清理删除重复文件

在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 1、打开文件夹D:\downloads&#xff1b; 2、哈希值比较比较里面所有的文件&#xff0c;如果文件相同&#xff0c;那么移动多余…

群晖NAS本地搭建Bitwarden密码管理服务并实现远程同步密码托管

文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序&#xff0c;适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…

华为配置智能无损网络综合

配置智能无损网络综合示例 适用产品和版本 安装了P系列单板的CE16800、CE6866、CE6866K、CE8851-32CQ8DQ-P、CE8851K系列交换机V300R020C00或更高版本。 安装了SAN系列单板的CE16800、CE6860-SAN、CE8850-SAN系列交换机V300R020C10或更高版本。 CE6860-HAM、CE8850-HAM系列交换…

初识FlaskMySQL实现前后端通信 全栈开发之路——后端篇(1)

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 第四篇&#xff1a;数据绑定、计算属性和watch监视 第五篇 : 组件…

02-WPF_基础(二)

3、控件学习 控件学习 布局控件&#xff1a; panel、Grid 内容空间&#xff1a;Context 之恶能容纳一个控件或布局控件 代表提内容控件&#xff1a;内容控件可以设置标题 Header 父类&#xff1a;HeaderContextControl。 条目控件&#xff1a;可以显示一列数据&#xf…

如何解决3D模型变黑或贴图不显示的问题---模大狮模型网

在进行3D建模和视觉渲染时&#xff0c;经常会遇到模型表面变黑或贴图不显示的问题&#xff0c;这可能严重影响最终视觉效果的质量。这些问题通常与材质设置、光照配置或文件路径错误有关。本文将探讨几种常见原因及其解决方法&#xff0c;帮助3D艺术家和开发者更有效地处理这些…

Java | Leetcode Java题解之第88题合并两个有序数组

题目&#xff1a; 题解&#xff1a; class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1 m - 1, p2 n - 1;int tail m n - 1;int cur;while (p1 > 0 || p2 > 0) {if (p1 -1) {cur nums2[p2--];} else if (p2 -1) {cur nums1[p…

Hive表数据优化

Hive表数据优化 1.文件格式 为Hive表中的数据选择一个合适的文件格式&#xff0c;对提高查询性能的提高是十分有益的。 &#xff08;1&#xff09;Text File 文本文件是Hive默认使用的文件格式&#xff0c;文本文件中的一行内容&#xff0c;就对应Hive表中的一行记录。 可…

VTK图形算法API:vtkSphereSource,球几何数据

大家好&#xff0c;我是先锋&#xff0c;专注于AI领域和编程技术分享&#xff0c;在这里定期分享计算机编程知识&#xff0c;AI应用知识&#xff0c;职场经验&#xff1b; 本系列介绍VTK图像算法API&#xff0c;后续会介绍VTK项目实践应用&#xff0c;关注我&#xff0c;不错过…

GPS与精致农业 无人机应用 农业遥感 农业类

全球定位系统是美国国防部主要为满足军事部门对海上、陆地和空中设施进行高精度导航和定位的要求而建立的。GPS系统最基本的特点是以“多星、高轨、高频、测量-测距”为体制&#xff0c;以高精度的原子钟为核心。GPS作为新一代卫星导航与定位系统&#xff0c;不仅具有全球性、全…

LeetCode 力扣题目:买卖股票的最佳时机 III

❤️❤️❤️ 欢迎来到我的博客。希望您能在这里找到既有价值又有趣的内容&#xff0c;和我一起探索、学习和成长。欢迎评论区畅所欲言、享受知识的乐趣&#xff01; 推荐&#xff1a;数据分析螺丝钉的首页 格物致知 终身学习 期待您的关注 导航&#xff1a; LeetCode解锁100…