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

解决方案

题意概述

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

题解

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

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

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

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

复制代码
class Solution:
    def minCount(self, coins: List[int]) -> int:
        return sum([(x+1)//2 for x in coins]
相关推荐
灵感__idea15 分钟前
Hello 算法:贪心的世界
前端·javascript·算法
澈2071 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202422 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_2 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi2 小时前
前缀和差分
算法·图论
代码旅人ing2 小时前
链表算法刷题指南
数据结构·算法·链表
Yungoal2 小时前
常见 时间复杂度计算
c++·算法
不爱吃炸鸡柳3 小时前
单链表专题(完整代码版)
数据结构·算法·链表
CylMK3 小时前
题解:AT_abc382_d [ABC382D] Keep Distance
算法
Dfreedom.4 小时前
计算机视觉全景图
人工智能·算法·计算机视觉·图像算法