• LCP 06. 拿硬币【向上取整】


    Tag

    【贪心】【数组】【2023-09-20】


    题目来源

    LCP 06. 拿硬币


    题目解读

    数组 coins 中存放的是一堆堆的力扣币,对于每一堆力扣币,你可以选择拿走一枚或者两枚,请返回拿走所有乐扣币的最少次数。


    解题思路

    方法一:贪心

    我们利用贪心的思想来解决。

    题目意思明确,对于每一堆的力扣币我们可以拿一枚也可以拿两枚,对于每一堆我们能拿两枚就拿两枚,不能拿两枚我们就拿一枚,这样拿完这一堆的力扣币次数最少,我们对每一堆拿取的次数最少(局部最优)促成了拿完所有力扣币的最少次数(全局最优)。

    具体地,我们对 2 取上整,即可实现贪心策略

    ab 取下整可以这样实现: ⌊ a b ⌋ = a / b \lfloor \frac{a}{b} \rfloor = a / b ba=a/bab 取上整可以这样实现: ⌈ a b ⌉ = ( a + b − 1 ) / b = ( b − 1 ) / a + 1 \lceil \frac{a}{b} \rceil = (a + b - 1) / b = (b - 1) / a + 1 ba=(a+b1)/b=(b1)/a+1

    实现代码

    
    
    • 1

    复杂度分析

    时间复杂度: O ( n ) O(n) O(n) n n n 为数组 coins 的长度。

    空间复杂度: O ( 1 ) O(1) O(1)

    知识回顾

    向上、向下取整

    除了以上介绍的两种向上、向下取整方式之外,还有一些其他方法可以进行向上、向下取整。

    需要强调的是向上、向下取整是对于浮点类型的取整,或者运算过程中出现的浮点类型取整。

    x 向上取整是返回大于等于 x 的最小整数,用 ⌈ x ⌉ \lceil x \rceil x 表示,比如 ⌈ 2.3 ⌉ = 3 \lceil 2.3 \rceil = 3 2.3=3。计算方法有 ceil(x),需要注意的是 ceil(x) 返回的是 double 类型、float 类型或者 long double 类型,具体的返回值类型适 x 的类型而定,使用完毕后还需要强转为整型数据。

    x 向下取整是返回小于等于 x 的最大整数,用 ⌊ x ⌋ \lfloor x \rfloor x 表示,比如 ⌊ 2.3 ⌋ = 2 \lfloor 2.3 \rfloor = 2 2.3=2。计算方法有 floor(x)floor(x) 返回的也是 double 类型、float 类型或者 long double 类型,具体的返回值类型适 x 的类型而定,使用完毕后还需要强转为整型数据。

    x 向下取整操作还可以直接使用 int 类型进行强转,比如 ⌊ 3.7 ⌋ = ( i n t ) 3.7 = 3 \lfloor 3.7 \rfloor = (int)3.7 = 3 3.7=(int)3.7=3

    写在最后

    如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

    如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

    最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

  • 相关阅读:
    ElasticSearch安装、配置详细步骤
    Python:整数四则运算及格式化输出
    线程第一次启动和异常的注册(UEF的一个特性)
    【校招VIP】前端算法考察之链表算法
    APIServerHandler及ServeHTTP流程分析
    【数据结构与算法】无重复字符的最长子串
    Hbuilder中微信小程序上传多图的案例分享
    [晕事]今天做了件晕事21;设置代理访问网站的时候需注意的问题
    python-(4-2)数据类型的应用(列表)
    桌面宠物 ① 通过python制作属于自己的桌面宠物
  • 原文地址:https://blog.csdn.net/weixin_54383080/article/details/133071064