华为上机真题 2022路灯照明
Posted Linux猿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022路灯照明相关的知识,希望对你有一定的参考价值。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
目录
注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!
一、题目描述
一条长 l 的笔直的街道上有 n 个路灯,若这条街的起点为 0,终点为 l,第 i 个路灯坐标为 ai ,每盏灯可以覆盖到的最远距离为 d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要使这个 d 最小,请找到这个最小的 d。
1.1 输入描述
每组数据第一行两个整数 n 和 l(n 大于 0 小于等于 1000,l 小于等于 1000000000 大于 0)。
第二行有 n 个整数(均大于等于 0 小于等于 l ),为每盏灯的坐标,多个路灯可以在同一点。
1.2 输出描述
输出答案,保留两位小数。
1.3 测试样例
示例1 输入输出示例仅供调试,后台判题数据一般不包含示例。
输入
7 15
15 5 3 7 9 14 0
输出
2.50
二、解题思路
在本题中,要使 d 最小,需要找到最大的间隔,此间隔的一半即是 d,需要注意的是:
(1)如果没有第 0 个路灯,那么,第一个路灯的间隔为第一个路径的坐标;
(2)如果最后一个路灯不等于 l,那么,最后一个路灯的间隔为长度 l 减去最后一个路灯的坐标;
三、代码实现
代码实现如下所示。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
int n, m;
while (cin>>n>>m)
int val;
vector<int>g;
for (int i = 0; i < n; ++i) // 获取输入
cin>>val;
g.push_back(val);
//sort 排序
sort(g.begin(), g.end());
int ans = g[0];
for (int i = 1; i < n; ++i) // 寻找最大间隔
ans = max(ans, g[i] - g[i - 1]);
ans = max(ans, m - g[n - 1]); // 处理最后一棵树
cout<<ans/2.0<<endl; // 取最大间隔的一半
return 0;
四、时间复杂度
时间复杂度:O(nlogn)。
在上面代码中,时间主要消耗在排序上,排序时间复杂度为 O(nlogn), for 循环遍历的时间复杂度为 O(n),所以时间复杂度为 O(nlog)。
🎈 感觉有帮助记得「一键三连」支持下哦!有问题可在评论区留言💬,感谢大家的一路支持!🤞猿哥将持续输出「优质文章」回馈大家!🤞🌹🌹🌹🌹🌹🌹🤞
以上是关于华为上机真题 2022路灯照明的主要内容,如果未能解决你的问题,请参考以下文章
华为OD机试 -路灯照明(JavaScript) | 机试题+算法思路+考点+代码解析 2023