力扣第三题java_LeetCode 题解 | 力扣杯 LCP 06. 拿硬币

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 05:31   11   0

24e5be0ad20089e018eb7cb3e211c9bc.png

力扣杯 LCP 06. 拿硬币(点击查看题目

力扣leetcode-cn.com

题目描述

桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

示例 1

输入: [4,2,1]
输出: 4
解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。

示例 2

输入: [2,3,10]
输出: 8

限制

  • 1 <= n <= 4
  • 1 <= coins[i] <= 10

解决方案

题意概述

有 n 堆硬币,每次从任意一堆拿走一枚或者两枚。问最少几次能够全部拿完。

题解

题目中虽然给了 n 堆硬币,但是最终每一堆都是要拿完的。而每一堆拿的情况又不影响其他硬币堆,因此每一堆硬币的拿法实际上是互相独立的

于是我们可以只考虑一堆的情况。假设一堆有 x 枚硬币,既然我们的目的是尽早拿完所有硬币堆,那么两枚两枚的拿显然是更快的。

求单堆硬币最小次数:(x+1)//2

那么,拿完所有硬币堆只需要循环对所有硬币堆都计算一次,然后求和就可以了。

class Solution:
    def minCount(self, coins: List[int]) -> int:
        return sum([(x+1)//2 for x in coins]

复杂度分析

时间复杂度:

空间复杂度:

本文作者:力扣

声明:本文归“力扣”版权所有,如需转载请联系。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP