[leetcode]06拿硬币

前言:剑指offer刷题系列

问题:

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

示例:

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

思路:

题目说的有点曲折,可以稍微修改题目看起来更好理解。即当给出一个包含不同面额硬币的列表coins,如何计算出最少需要多少个硬币来凑成一个给定的总金额。可以使用贪心算法来解决这个问题,一次可以去1次或2次,那默认每次都按最大数量取硬币。

即我的思想是尽可能每次多地拿取每个硬币,因为使用一个硬币只需要一次操作,而不使用硬币需要两次操作。所以,对于每个硬币,我们将其面额加一后再除以2,得到需要的硬币数量,并累加到count中,最后输出count为进行操作的次数。

这个算法的时间复杂度是O(N),其中N是硬币的数量,因为我们只需遍历一次硬币列表。

空间复杂度:O(1)

基于上述思考,代码如下:

class Solution:def minCount(self, coins: List[int]) -> int:count = 0for coin in coins:count += (coin + 1) // 2return count

执行结果如下图:

时间运行速度还行,内存消耗还不错。
image-20230920141855318.png

学到的知识点:

  1. 贪心算法(Greedy Algorithm): 这段代码使用了贪心算法的思想,即每次选择当前情况下最优的解决方案,而不考虑全局的最优解。在这个例子中,我们每次尽量多地使用每个硬币,以最小化所需的硬币数量,贪心算法在这里的局部最优解也是全局最优解。
  2. 整数除法和取整: 代码中使用了 (coin + 1) // 2 来进行整数除法,这是一种常见的计算方法,可以得到除法结果的整数部分,也可以使用python的ceil函数实现相同操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/568831.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux基础】ubuntu虚拟机配置及原理

一、虚拟机 虚拟机(Virtual Machine,VM)是一种软件实现的计算机系统,它在物理计算机上模拟了一个完整的计算机硬件环境,包括处理器、内存、存储设备和网络接口等。通过虚拟机,用户可以在单个物理计算机上同…

Nginx(Docker 安装的nginx)配置域名SSL证书

1.首先确保Linux环境上已经安装了docker(可参考VMware使用和Linux安装Docker_wmware直接部署linux和安装docker后-CSDN博客 2.通过docker 安装nginx(可参考Linux 环境安装Nginx—源码和Dokcer-CSDN博客) 3.安装SSL证书 3.1 在宿主机中创建…

Python学习笔记(二)

一:异常: 1.1:异常处理: 1.2:异常捕获: 1.3:异常传递: 二:模块: 2.1:模块的定义: 2.2:模块的导入: 2.3&…

PCA+DBO+DBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper!

PCADBODBSCN聚类,蜣螂优化算法DBO优化DBSCN聚类,适合学习,也适合发paper! 一、蜣螂优化算法 摘要:受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发,提出了一种新的基于种群的优化算法(Dung Beetle Optim…

【PyQt】18 -菜单等顶层操作

顶层界面的使用 前言一、菜单栏1.1 代码1.2 运行结果 二、工具栏2.1 代码几种显示方法 2.2 运行结果 三、状态栏3.1 代码3.2 运行结果 总结 前言 1、介绍顶层菜单栏目的使用,但没有陆续绑定槽函数。 2、工具栏 3、状态栏 一、菜单栏 1.1 代码 #Author &#xff1a…

碳课堂|什么是碳资产?企业如何进行碳资产管理?

碳资产是绿色资产的重要类别,在全球气候变化日益严峻的背景下备受关注。在“双碳”目标下,碳资产管理是企业层面实现碳减排目标和低碳转型的关键。 一、什么是碳资产? 碳资产是以碳减排为基础的资产,是企业为了积极应对气候变化&…

如何忽略Chrome最小字号的限制

通过控制台调整字体大小时,可以发现即便设置了小于12px的字号,也并不会变小,这是因为Chrome默认最小字号为12px。 在Chrome设置中的外观选项卡中可以发现,默认字体是16px。将最小字号改为0,就能随意设置小于12px的字号…

科东软件鸿道IntewellV2.3.2版本发布说明

一、软件发布版本信息 版本号:V2.3.2版本发布类型:beta受限版本 二、版本特点 1.合并分支代码 2.RTOS支持X86 64位 三、运行环境推荐 Intewell developer可以运行在windows7及windows10 64位 四、支持硬件列表

后端系统开发之——功能完善

原文地址:https://blog.yiming1234.cn/?p830 下面是正文内容: 前言 通过SpringBoot开发用户模块的部分也就差不多要结束了,这一片文章就主要提一些在系统开发中需要注意到的细节部分和功能,也就是剩余的部分。 但是这个专栏只介…

测试开发工程师(QA)职业到底需要干些什么?part3:算法QA

算法测试/评测QA工作主要是评估和测试深度学习、计算机视觉、智能机器人、虚拟个人助理、自然语言处理—语音识别、自然语言处理—通用、实时语音翻译、情境感知计算、手势控制、视觉内容自动识别、推荐引擎等的性能和效果。以下是该工作的一般流程和任务: 数据收集…

紫鸾5.0:紫光云新一代敏捷应用开发平台全家桶

曾几何时,“瀑布式”占据了二十世纪软件开发的主流,开发时间往往以年计,一款软件应用动辄几年才能交付。而随着社会生产力的跃升,“瀑布式”已严重跟不上时代的节奏,2001年,“敏捷宣言”的发布,…

C++运算符重载中的引用返回

文章目录 引言原因1.为了支持链式调用2.避免不必要的对象创建和复制3.保持语义一致性 引言 在C编程语言中,运算符重载是一项强大的特性,它允许程序员为自定义类型重新定义或重载已有的运算符,从而使得这些类型能够像内置类型一样使用运算符。…