华为上机真题 2022路灯照明

Posted Linux猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为上机真题 2022路灯照明相关的知识,希望对你有一定的参考价值。


🎈 作者:Linux猿

🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀

🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


目录

一、题目描述

1.1 输入描述

1.2 输出描述

1.3 测试样例

二、解题思路

三、代码实现

四、时间复杂度


注意:题目来源于网络用户分享,本文仅分享做题思路和方法,如有侵权请联系我删除!

一、题目描述

一条长 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路灯照明的主要内容,如果未能解决你的问题,请参考以下文章

2022华为机试真题 C++ 实现路灯照明

华为机试真题 Python 实现路灯照明

华为机试真题 Python 实现路灯照明

华为OD机试 -路灯照明(JavaScript) | 机试题+算法思路+考点+代码解析 2023

华为OD机试模拟题用 C++ 实现 - 路灯照明(2023.Q1)

动手实践开发一个智慧路灯控制器