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

题解
题目中虽然给了 n 堆硬币,但是最终每一堆都是要拿完的。而每一堆拿的情况又不影响其他硬币堆,因此每一堆硬币的拿法实际上是互相独立的。
于是我们可以只考虑一堆的情况。假设一堆有 x 枚硬币,既然我们的目的是尽早拿完所有硬币堆,那么两枚两枚的拿显然是更快的。
求单堆硬币最小次数:(x+1)//2
那么,拿完所有硬币堆只需要循环对所有硬币堆都计算一次,然后求和就可以了。
class Solution:
def minCount(self, coins: List[int]) -> int:
return sum([(x+1)//2 for x in coins]