华为OD统一考试 - 爱吃蟠桃的孙悟空

题目描述

孙悟空爱吃蟠桃,有一天趁着蟠桃园守卫不在来偷吃。已知蟠桃园有 N 棵桃树,每颗树上都有桃子,守卫将在 H 小时后回来。

孙悟空可以决定他吃蟠桃的速度K(个/小时),每个小时选一颗桃树,并从树上吃掉 K 个,如果树上的桃子少于 K 个,则全部吃掉,并且这一小时剩余的时间里不再吃桃。

孙悟空喜欢慢慢吃,但又想在守卫回来前吃完桃子。

请返回孙悟空可以在 H 小时内吃掉所有桃子的最小速度 K(K为整数)。如果以任何速度都吃不完所有桃子,则返回0。

输入描述

第一行输入为 N 个数字,N 表示桃树的数量,这 N 个数字表示每颗桃树上蟠桃的数量。

第二行输入为一个数字,表示守卫离开的时间 H。

其中数字通过空格分割,N、H为正整数,每颗树上都有蟠桃,且 0 < N < 10000,0 < H < 10000。

输出描述

吃掉所有蟠桃的最小速度 K,无解或输入异常时输出 0。

用例

输入

2 3 4 5

4

输出

5

说明

输入

2 3 4 5

3

输出

0

说明

输入

30 11 23 4 20

6

输出

23

说明

题目解析

本题可以使用二分法解题。


import Foundation

func ODTest_2_1() {
    print("第一行输入为 N 个数字,N 表示桃树的数量,这 N 个数字表示每颗桃树上蟠桃的数量。")
    var N = (readLine() ?? "").split(separator: " ").map { Int($0) ?? 0 }
    print("第二行输入为一个数字,表示守卫离开的时间 H。")
    print("其中数字通过空格分割,N、H为正整数,每颗树上都有蟠桃,且 0 < N < 10000,0 < H < 10000。")
    let H = Int(readLine() ?? "") ?? 0
    print("吃掉所有蟠桃的最小速度 K")
    if let _ = N.first(where: { $0 < 1 || $0 > 10000 }) {
        print("0")
        return
    }

    if H < 1 || H > 10000 {
        print("0")
        return
    }

    N.sort(by: { $0 < $1 })

    let l = 0
    let r = N.count
    var mid = (l + r) / 2
    while mid < r && mid > 0 {
        var k = mid + 1
        for i in (mid + 1) ..< r {
            k += (N[i] / N[mid]) + (N[i] % N[mid] == 0 ? 0 : 1)
        }
    
        if k > H {
            mid += 1
        } else if k < H {
            mid -= 1
        } else {
            print("\(N[mid])")
            return
        }
    }
    print("0")
}

2024华为OD机试卷题 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论

相关推荐

面经(记忆版)两两交换链表中的节点二叉树的层序遍历写完了之后,开始问一些问题React和Vue有什么区别?watch和computed有什么区别?&nbsp;前者主要用于管理副作用,后者用于管理数据依赖更新看过watch和computed源码吗&nbsp;聊了一下响应式的核心实现这个响应式的实现遵循了哪些设计模式?&nbsp;就答出来个发布-订阅模式还有观察者模式、装饰器模式讲讲&nbsp;Diff&nbsp;算法&nbsp;分别从Vue&nbsp;的&nbsp;Block/静态提升/更新标记等和React&nbsp;的&nbsp;Fiber&nbsp;架构聊了一下key&nbsp;的作用,更新key去清空组件数据会有什么问题?&nbsp;给diff算法辨别谁是谁更新key会导致组件的销毁和重建,带来额外的性能开销如果说一个组件造成了很大的内存开销,你如何定位?&nbsp;只讲了可以用开发者工具的Memory标签,具体的没有实践过React和Vue的生命周期获取图表数据应该放在哪个生命周期上做?&nbsp;onMounted如果有一些数据需要页面挂载之前处理,在哪里做?&nbsp;onCreatedTailwindCSS解决了什么问题?&nbsp;不用想类名,读起来写起来比较清晰有什么缺点?&nbsp;可能鼓励开发者写超多类,反而降低可读性SaSS等预处理器,主要解决什么问题?&nbsp;所有的预处理器无非两个方向:让开发者用起来更好用(比如嵌套样式),实际应用的时候性能更好(比如删除未使用的类/打包优化等)在打包体积可能比较大的情况下,如何做加载速度优化?&nbsp;考虑从两个方面去解决,一个是本身体积大,那就需要比较长的下载时间,一个是执行时间长,可能会导致前端卡顿;体积方面&nbsp;通过TreeShaking等特性降低打包体积通过CDN加速下载雪碧图等避免频繁的资源请求执行时间方面&nbsp;通过defer和async标签延迟js执行,通过异步方式减少阻塞(比如React和Fiber和JS的Promise)聊了一下简历中的一个项目,有登录页,登陆的整个过程是什么样的?&nbsp;拿到账号和密码之后对密码进行单向加密,然后把他们俩通过接口发给后端去校验,再通过后端返回的状态码判断校验结果,错误就发一个toast展示错误信息;成功就跳转首页token的更新机制用&nbsp;cookie&nbsp;携带&nbsp;token&nbsp;带来的&nbsp;CSRF&nbsp;问题及如何预防另一个项目里有很多视频,如何优化视频加载?&nbsp;CDN流媒体技术,分段提供更低的码率,更新的压缩算法,降低视频体积蔚来2025届校园招聘开启(含蔚来总部+蔚来区域公司)【关于蔚来】蔚来是一家全球顶尖的智能电动汽车公司,于2014年11月成立【热招岗位】产品类、项目管理类、米哈游、设计类、工程技术类、数字技术类、智能制造类、用户服务类、职能与支持类、动力电池类【工作地点】上海、合肥、北京、深圳、武汉、苏州、南京等全国多地【招聘节奏】7.31起发测评/笔试—&gt;8月上旬开始面试NIO校招内推码:&nbsp;R6D4SHC&nbsp;投递链接:https://nio.jobs.feishu.cn/s/iMmps5FN【备注】使用内推链接无需填写内推码,简历优先筛选,后续有疑问或者流程问题欢迎随时联系,可跟踪到投递的uu评论一下姓名缩写加岗位(HFG+产品经理),我会尽力跟进~
蔚来
|
校招
|
737个岗位
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务