Java贪心算法逻辑讲解及代码详解

news/2025/1/9 3:26:06/

贪心算法是一种自顶向下的算法思想,它通过局部最优的选择来实现全局最优的解决方案。贪心算法的底层逻辑和代码实现如下:

  1. 确定问题的贪心策略:贪心策略是指在每个阶段选择最优解,从而实现全局最优解。

  2. 将问题转换为贪心算法可解决的形式:将问题描述转化为一组数据,对这组数据进行排序。

  3. 根据贪心策略进行选择:在每个阶段选择最优的解决方案,并将其添加到问题解决方案中。然后将问题转换为较小的子问题进行解决。

  4. 重复步骤3,直到问题解决为止。

下面,我们将通过一个简单的例子来展示贪心算法的底层逻辑和代码实现:

问题描述:假设有n个会议,每个会议有开始时间和结束时间,现在需要从这些会议中选择尽量多的会议,使得不同会议之间的时间不冲突。请找出最多选择几个会议。

假设数据如下:
会议开始时间 1, 2, 3, 4, 6,8,10
会议结束时间 5, 6, 7, 8, 9,13,15

按照贪心算法的思路,我们首先需要确定问题的贪心策略。容易发现,在这个问题中,我们可以将会议按照结束时间从早到晚进行排序,然后尽可能选择早结束的会议,因为这样会留下更多的时间去参加其他会议。因此,这里的贪心策略就是按照会议结束时间排序,选取结束时间最早的会议。

代码实现如下:

public class GreedyAlgorithm {public static void main(String[] args) {int[] start_time = {1, 2, 3, 4, 6, 8, 10}; // 会议开始时间int[] end_time   = {5, 6, 7, 8, 9, 13, 15}; // 会议结束时间int n = start_time.length; // 会议总数int[] chosen = new int[n]; // 记录选择的会议编号int count = 0; // 记录选择的会议数量// 按照会议结束时间从早到晚排序for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {if (end_time[i] > end_time[j]) {int temp = end_time[i];end_time[i] = end_time[j];end_time[j] = temp;temp = start_time[i];start_time[i] = start_time[j];start_time[j] = temp;}}}// 根据贪心策略选择会议int current_end_time = 0; // 当前已选会议的结束时间for (int i = 0; i < n; i++) {if (start_time[i] >= current_end_time) { // 当前会议不与已选会议冲突chosen[count++] = i; // 记录选择的会议编号current_end_time = end_time[i]; // 更新当前已选会议的结束时间}}// 输出结果System.out.println("最多可以选择的会议数量:" + count);System.out.println("选择的会议编号:");for (int i = 0; i < count; i++) {System.out.print(chosen[i] + " ");}}
}

在这段代码中,我们首先按照会议结束时间从早到晚对所有会议进行排序。然后,根据贪心策略从开始时间最早的会议开始选择。


http://www.ppmy.cn/news/102869.html

相关文章

5月29号软件资讯更新合集......

Paozhu C Admin 管理后台 1.4.0 版本发布 Paozhu C web 框架 1.4.0 版本发布。 提供一个完整的 admin 管理后台&#xff0c;支持图片管理&#xff0c;文件上传&#xff0c;修改百度开源编辑器 ueditor 上传管理程序为 c 框架自带 C ORM 框架&#xff0c;支持 HTTP/1 HTTP/2 …

【Nodejs】Node-js笔记

Node.js 文章目录 Node.js一、Node.js概述1.1、介绍1.2、官网1.3、Node.js应用场景1.4、安装Node.js1.5、npm包管理器1.5.1、介绍1.5.2、切换npm源1.5.3、生成JSON配置文件1.5.4、查看当前安装的树形模块1.5.5、安装模块1.5.6、自定义脚本命令1.5.7 、自动重启应用 1.6、模块化…

Java的运行原理

在Java中引入了虚拟机的概念&#xff0c;即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机&#xff0c;生成虚拟机能够理解的代码&#xff0c;然后由解释器来将虚拟机代码转换为特定…

如何撤消 Git 中最新的本地提交?

在使用Git进行版本控制时&#xff0c;有时我们可能会犯下错误或者想要撤销最新的本地提交。Git提供了一些强大的工具和命令&#xff0c;使我们能够轻松地撤消最近的提交并修复错误。 本文将详细介绍如何在Git中撤消最新的本地提交。 步骤1&#xff1a;查看提交历史 在撤消最新…

智能化、多模态、平民化,星环科技行业大模型、向量数据库深度解析

星环科技落地未来数据技术&#xff0c;实现数据处理智能化、多模态、平民化。 出品 | CSDN云计算 以ChatGPT为代表的超大语言模型的迅速应用&#xff0c;加速了AI普及&#xff0c;让AI伸手可及&#xff0c;并开始走进我们的工作和生活。毫无疑问&#xff0c;AI大模型等技术已经…

前端常见跨域解决方案(jsonp,cors,proxy,postMessage,webSocket)

跨域的几种解决方案&#xff1a; 一、JSONP&#xff08;jsonp&#xff09; 概念&#xff1a; JSONP&#xff08;JSON with Padding&#xff0c;填充式 JSON 或参数式 JSON&#xff09;是一种通过 优点&#xff1a; 简单易用兼容性好&#xff0c;支持各种浏览器 缺点&…

组合总和 II

1题目 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意&#xff1a;解集不能包含重复的组合。 示例 1: 输入: candidates [10,1…

旋转设备轴承故障,有哪些常见原因及监测手段?

在各种旋转设备中&#xff0c;轴承是关键的构件之一。轴承的正常运行对于设备的稳定性、寿命和效率至关重要。然而&#xff0c;轴承也是容易出现故障的部件之一。为了及时发现轴承故障并采取维修措施&#xff0c;监测轴承状态变得至关重要。本文将介绍旋转设备轴承常见的故障问…