华为OD机试 - 停车场车辆统计 - 贪心算法(Java 2024 D卷 200分)

在这里插入图片描述

华为OD机试 2024D卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。

二、输入描述

整型字符串数组cars[],其中1表示有车,0表示没车,数组长度小于1000。

三、输出描述

整型数字字符串,表示最少停车数目。

四、测试用例

测试用例1:

1、输入

1,0,1

2、输出

2

3、说明

1个小车占第1个车位

第二个车位空

1个小车占第3个车位

最少有两辆车

测试用例2:

1、输入

1,1,0,0,1,1,1,0,1

2、输出

3

3、说明

1个货车占第1、2个车位

第3、4个车位空

1个卡车占第5、6、7个车位

第8个车位空

1个小车占第9个车位

最少3辆车

五、解题思路

1、贪心算法

贪心算法是一种在每一步选择中都采取当前最优策略,以期在全局达到最优解决方案的算法。

贪心算法适用哪些场景?
  1. 活动选择问题: 选择最多数量的互不重叠活动。
  2. 背包问题(可分割): 将物品装入背包以最大化总价值,但物品可以分割。
  3. 最小生成树: 例如Kruskal和Prim算法。
  4. 霍夫曼编码: 构建一个高效的前缀编码树。
  5. 贪心货币找零问题: 在某些货币系统中,使用最少的硬币找零。
  6. 区间覆盖: 选择最少数量的区间覆盖所有点。
  7. 图的染色问题: 某些图的染色问题可以用贪心算法解决。
贪心算法有哪些注意事项?

(1)局部最优不保证全局最优:

贪心算法每一步选择的都是当前最优解,但这不一定能保证最后得到的是全局最优解。

例如,在某些背包问题(不可分割的背包问题)中,贪心算法并不适用。

(2)问题是否具有贪心选择性质:

问题必须具有贪心选择性质,即从局部最优解可以推导出全局最优解。

例如,在活动选择问题中,选择最早结束的活动可以保证最多的活动数。

(3)可行性:

每一步选择必须是可行的,即它必须满足问题的约束条件。

例如,在图的染色问题中,每一步选择的颜色必须不同于相邻节点的颜色。

(4)子问题的最优解:

原问题的最优解包含其子问题的最优解,子问题之间不能有相互影响。

例如,在区间覆盖问题中,每次选择的区间必须最优地覆盖未覆盖的部分。

2、为什么采用贪心算法?

贪心算法的适用性

(1)局部最优解构建全局最优解:

我们希望在每个连续1的段落中使用尽可能少的车位。贪心算法通过每次选择最长的车(优先使用卡车,再是货车,最后是小车),确保每段连续的1使用最少数量的车。

例如,对于连续3个1的段落,使用一辆卡车是最优选择,而不是使用三辆小车。这种局部最优选择最终会构成全局最优解。

(2)问题的分段处理:

本题可以通过对每个独立的连续1段落单独处理来简化问题。每个段落可以独立计算所需的最少车数,然后将结果累加得到最终结果。

贪心算法在这种分段处理时表现良好,因为它不需要考虑段落之间的相互影响。

(3)简单且高效:

贪心算法的时间复杂度是O(n),其中n是数组的长度。只需一次遍历即可完成计算。

对于每段连续的1,贪心算法直接计算出所需的最少车数,而不需要复杂的动态规划或回溯算法。

3、具体步骤:

使用贪心算法来计算每个连续1段落所需的最少停车车数。

在计算每个连续1段落所需的最少停车车数时,优先选择最长的车(卡车长度为3),然后是中等长度的车(货车长度为2),最后是最短的车(小车长度为1)。这种策略确保我们以最少的车数覆盖所有连续的1段落。

六、Java算法源码

public class OdTest {public static int minParkingCars(int[] cars) {int n = cars.length;int minCars = 0;int i = 0;while (i < n) {if (cars[i] == 1) {int length = 0;while (i < n && cars[i] == 1) {length++;i++;}// 根据连续1的长度,计算最少需要的车数minCars += calculateMinCars(length);} else {i++;}}return minCars;}private static int calculateMinCars(int length) {int cars = 0;// 优先使用卡车(长度3)cars += length / 3;length %= 3;// 使用货车(长度2)cars += length / 2;length %= 2;// 剩余的使用小车(长度1)cars += length;return cars;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] cars = Arrays.stream(sc.nextLine().split(",")).mapToInt(Integer::parseInt).toArray();int result = minParkingCars(cars);System.out.println(result); // 输出 3}
}

七、效果展示

1、输入

1,0,1,0,1,0,1

2、输出

4

3、说明

每个车位段落都只包含一个1,因此每个段落需要一辆小车来占据车位。

具体计算步骤如下:

第一个1段落需要1辆小车。
第二个1段落需要1辆小车。
第三个1段落需要1辆小车。
第四个1段落需要1辆小车。

因此,总的最少停车数为4。

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 D卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(D卷+C卷+A卷+B卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

微服务注册中心

目录 1.微服务的注册中心 1.1 注册中⼼的主要作⽤ 1.2 常⻅的注册中⼼ 2.nacos简介 2.1 nacos实战⼊⻔ 2.2.1 搭建nacos环境 2.2.2 将商品微服务注册到nacos 3.服务调⽤Ribbon⼊⻔ 3.1 Ribbon概述 3.1.1 什么是Ribbon 3.1.2 Ribbon的主要作⽤ 3.2.2 ⼯程改造 4.服务…

多区域DNS以及主从DNS的搭建

搭建多域dns服务器&#xff1a; 搭建DNS多区域功能&#xff08;Multi-Zone DNS&#xff09;主要是为了满足复杂网络环境下的多样化需求&#xff0c;提高DNS服务的灵活性、可扩展性和可靠性。 适应不同网络环境&#xff1a; 在大型组织、跨国公司或跨地域服务中&#xff0c;网…

大模型学习笔记 - LLM指令微调

LLM 指令微调 LLM 指令微调 0. 概览1. 指令数据的构建 1.1 基于现有NLP任务数据集构建1.2 基于日常对话数据构建1.3 基于合成数据构建1.4 指令数据构建的提升方法 2. 指令微调的策略 2.1 优化设置2.2 数据组织策略 3. 参数高效的模型微调 3.1 低秩适配微调方法3.2 其他高效微调…

使用flutter做圆形进度条 (桌面端)

前言 最近收到一个需求&#xff0c;需要使用flutter 来做一个圆形进度条&#xff0c;这可难倒我了&#xff0c;毕竟我是做前端的&#xff0c;flutter 之前接触的也少&#xff0c;但没办法&#xff0c;既然需求有了&#xff0c;也得硬着头皮上了&#xff0c;先来看看做的效果。…

C语言-TCP通信创建流程

TCP通信创建流程 1. 客户端创建TCP连接 在整个流程中, 主要涉及以下⼏个接⼝socket() : 创建套接字, 使⽤的套接字类型为流式套接字connect() : 连接服务器send() : 数据发送recv() : 数据接收创建套接字 首先&#xff0c;我们需要创建套接字&#xff0c;套接字是通信的基础…

构建查询洞察 UI

本文字数&#xff1a;2631&#xff1b;估计阅读时间&#xff1a;7 分钟 作者&#xff1a;Bucky Schwarz 本文在公众号【ClickHouseInc】首发 我们最近发布了 Query Insights 的初步实现&#xff0c;为 ClickHouse Cloud 用户提供了一种便捷的方法来查看和解释查询日志。该功能对…

MySQL索引、事务(数据库管理与高可用)

一、索引的概念 索引&#xff1a;排序的列表&#xff0c;对数据进行快速的查询&#xff1b; 针对不同的产品需求&#xff0c;或者不同的数据库结构&#xff0c;会创建不同的索引&#xff1b; 1&#xff1a;普通索引&#xff08;默认索引&#xff09; 2&#xff1a;唯一索引…

推荐一个酷炫高逼格的服务器探针的监控工具,免费开源(附源码)

背景 作为一名攻城狮&#xff0c;面对各种服务器内存飙高、CPU猛增、磁盘打满等等服务器问题&#xff0c;可谓是伤透了我们的心。 不仅要开发&#xff0c;还要处理这些问题&#xff0c;大把的时间浪费了&#xff0c;这时候一个好的全面的监控工具尤为重要了。 所以&#xff…

C++基础知识:函数重载相关注意事项:1.引用作为重载条件,2.2.函数重载遇见函数默认参数。

1.引用作为重载条件 #include<iostream>using namespace std;//1.引用作为重载的条件 //int 和 const int 类型不同&#xff0c;所以可以作用重载条件 void fn(int &a) //int &a10;不合法 //10放在了常量区&#xff0c;而引用要么在栈区&#xff0c;要么在堆区{…

Unity打包设置

1.Resolution and Presentation (分辨率和显示) Fullscreen Window (全屏窗口): 应用程序将以全屏窗口模式运行&#xff0c;但不会独占屏幕。适用于想要全屏显示但仍需访问其他窗口的情况。 Resizable Window (可调整大小的窗口): 允许用户调整应用程序窗口的大小。适用于窗口…

保险丝(常见元器件及电路基础知识)

分类&#xff1a;简单分为熔断式和非熔断式 电压&#xff1a;保险丝的额定电压是指它的公称额定电压, 通常就是保险丝断开后能够承受的最大电压值保险丝通电时两端所承受的电压大大小于其额定电压&#xff0c;因此额定电压基本上无关紧要。 电流&#xff1a; PFC为功率因数矫…

昇思25天学习打卡营第三十四天|Jack578

昇思25天学习打卡营第三十四天|Jack578 一、数据集Dataset&#xff08;一&#xff09;数据集加载&#xff08;二&#xff09;数据集迭代&#xff08;三&#xff09;数据集常用操作 一、数据集Dataset 数据是深度学习的基础&#xff0c;MindSpore提供基于Pipeline的数据引擎&am…

项目管理中的常用工件(二):可视化工件

项目管理中的常用工件&#xff08;二&#xff09;&#xff1a;可视化工件 亲和图&#xff08;affinity diagram&#xff09;因果图&#xff08;cause-and-effect diagram&#xff09;直方图&#xff08;histogram&#xff09;流程图&#xff08;flowchart&#xff09;散点图&am…

[练习]如何使用递归算法?

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f525;个人专栏&#xff1a;算法(Java)&#x1f4d5;格言&#xff1a;吾愚多不敏&#xff0c;而愿加学欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1. 递归概述 2.汉诺塔问题 题目描述​编辑 题解 代码实现 3…

mac M1安装Roop教程及所遇到的问题

1.安装miniconda&#xff0c;下载地址&#xff1a; 按 Python 版本划分的最新 Miniconda 安装程序链接&#xff1a;https://docs.anaconda.com/miniconda/miniconda-other-installer-links/ 下载后直接默认安装即可。 我用的是&#xff1a;Python3.10对应的Miniconda 2.下载…

7月26日JavaSE学习笔记

反射 Java是面向对象的&#xff0c;有对象必须先有类&#xff0c; 有static修饰类的属性和方法&#xff1b;在Java中存储了类的内容&#xff0c;这个内容也应该是一个对象&#xff1b;Java中每一个用到的类都会加载一块内存&#xff0c;这每一块内存都是一个对象&#xff1b;这…

php+bootstrap 编写简易的步骤进度条

个人笔记记录&#xff0c;步骤进度条。 版本一&#xff1a; 初始版本&#xff0c; 当前版本单纯的根据bootstrapCSS进行完成的简易版本。这个比较简单 样式我放在了最底下。 <div class"form-group steps"><div class"steps-height"><di…

txt格式单词导入有道词典生词本 (java代码方式)

txt格式单词导入有道词典生词本 (java代码方式) 首先要求txt文档里单词的格式&#xff0c;大概需要像这种&#xff1a; 每行是一个单词&#xff0c;格式为&#xff1a;英文单词空格词性单词意思。 注意 导出单词本的名字就是你 txt 文件的名字 我这里是 公共英语三级 单词本 …

IAR使用调试详解

目录 1 IAR功能介绍 1.1 File文件菜单 1.2 Edit编辑菜单 1.3 View视图菜单 1.4 Projcet工程菜单 1.5Debug调试菜单 1.6 Disassembly反汇编菜单 1.7 Simulator下载调试工具 1.8 Tools工具菜单 1.9 Window窗口菜单 1.10 Help帮助菜单 2 IAR设置 2.1 插入/编辑模板 2…

如何选择最佳的云盘检测方案?

橡胶密封圈是一种用于填塞、密封或隔离物体之间空隙的圆形零件&#xff0c;通常由橡胶或类似材料制成。这些密封圈通常用于工程、机械或汽车领域&#xff0c;以防止液体、气体或其他物质泄漏。 橡胶密封圈通常对多种化学物质具有良好的耐腐蚀性能&#xff0c;使其适用于各种环…