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$个硬币,需要的最少次数为$\lceil \frac{n}2 \rceil$。

小技巧:$\lfloor\frac{n+1}2\rfloor=\lceil \frac{n}2 \rceil$

  • 时间复杂度$O(len(coins))$
  • 空间复杂度$O(1)$

AC代码

C++

1
2
3
4
5
6
7
8
9
10
class Solution {
public:
int minCount(vector<int>& coins) {
int ans = 0;
for (int t : coins) {
ans += (t + 1)/ 2;
}
return ans;
}
};

Python

1
2
3
4
5
# 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


LCP 06.拿硬币
https://blog.letmefly.xyz/2023/09/20/LeetCode LCP 06. 拿硬币/
作者
Tisfy
发布于
2023年9月20日
许可协议