经典算法题剖析之拿硬币(二)

解决方案

题意概述

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

题解

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

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

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

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

复制代码
class Solution:
    def minCount(self, coins: List[int]) -> int:
        return sum([(x+1)//2 for x in coins]
相关推荐
优化控制仿真模型11 分钟前
2026年最新驾考科目一考试题库2309道全。电子版pdf
经验分享·算法·pdf
qq_3349031513 分钟前
嵌入式C++驱动开发
开发语言·c++·算法
阿贵---24 分钟前
C++代码规范化工具
开发语言·c++·算法
暮冬-  Gentle°32 分钟前
自定义内存检测工具
开发语言·c++·算法
ccLianLian44 分钟前
数论·欧拉函数
数据结构·算法
2501_945424801 小时前
C++编译期矩阵运算
开发语言·c++·算法
2301_815482931 小时前
C++中的类型标签分发
开发语言·c++·算法
xushichao19891 小时前
代码生成优化技术
开发语言·c++·算法
炽烈小老头1 小时前
【每天学习一点算法 2026/03/22】前 K 个高频元素
学习·算法
2401_873204651 小时前
模板编译期循环展开
开发语言·c++·算法