LeetCode LCP 06.拿硬币

【LetMeFly】LCP 06.拿硬币

力扣题目链接:https://leetcode.cn/problems/na-ying-bi/

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

示例 1:

输入:[4,2,1]

输出:4

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

示例 2:

输入:[2,3,10]

输出:8

限制:

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

方法一:遍历

每次能拿1或2枚硬币,那肯定是尽可能地多拿。对于一堆 n n n个硬币,需要的最少次数为 ⌈ n 2 ⌉ \lceil \frac{n}2 \rceil 2n

小技巧: ⌊ n + 1 2 ⌋ = ⌈ n 2 ⌉ \lfloor\frac{n+1}2\rfloor=\lceil \frac{n}2 \rceil 2n+1=2n

  • 时间复杂度 O ( l e n ( c o i n s ) ) O(len(coins)) O(len(coins))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
class Solution {
public:
    int minCount(vector<int>& coins) {
        int ans = 0;
        for (int t : coins) {
            ans += (t + 1)/ 2;
        }
        return ans;
    }
};
Python
# from typing import List

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

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/133070027

你可能感兴趣的:(题解,#,力扣LeetCode,leetcode,算法,题解,数组,遍历)