【Leetcode】2952. 需要添加的硬币的最小数量

文章目录

  • 题目
  • 思路
  • 代码
  • 复杂度分析
    • 时间复杂度
    • 空间复杂度
  • 结果
  • 总结

题目

题目链接🔗
给你一个下标从 0 0 0 开始的整数数组 c o i n s coins coins,表示可用的硬币的面值,以及一个整数 t a r g e t target target

如果存在某个 c o i n s coins coins 的子序列总和为 x x x,那么整数 x x x 就是一个 可取得的金额

返回需要添加到数组中的 任意面值 硬币的 最小数量 ,使范围 [ 1 , t a r g e t ] [1, target] [1,target] 内的每个整数都属于 可取得的金额

数组的 子序列 是通过删除原始数组的一些(可能不删除)元素而形成的新的 非空 数组,删除过程不会改变剩余元素的相对位置。

示例 1
输入:coins = [1,4,10], target = 19
输出:2
解释:需要添加面值为 2 2 2 8 8 8 的硬币各一枚,得到硬币数组 [ 1 , 2 , 4 , 8 , 10 ] [1,2,4,8,10] [1,2,4,8,10]
可以证明从 1 1 1 19 19 19 的所有整数都可由数组中的硬币组合得到,且需要添加到数组中的硬币数目最小为 2 2 2

示例 2
输入:coins = [1,4,10,5,7,19], target = 19
输出:1
解释:只需要添加一枚面值为 2 2 2 的硬币,得到硬币数组 [ 1 , 2 , 4 , 5 , 7 , 10 , 19 ] [1,2,4,5,7,10,19] [1,2,4,5,7,10,19]
可以证明从 1 1 1 19 19 19 的所有整数都可由数组中的硬币组合得到,且需要添加到数组中的硬币数目最小为 1 1 1

示例 3
输入:coins = [1,1,1], target = 20
输出:3
解释
需要添加面值为 4 4 4 8 8 8 16 16 16 的硬币各一枚,得到硬币数组 [ 1 , 1 , 1 , 4 , 8 , 16 ] [1,1,1,4,8,16] [1,1,1,4,8,16]
可以证明从 1 1 1 20 20 20 的所有整数都可由数组中的硬币组合得到,且需要添加到数组中的硬币数目最小为 3 3 3

提示

  • 1 ≤ t a r g e t ≤ 1 0 5 1 \leq target \leq 10^5 1target105
  • 1 ≤ c o i n s . l e n g t h ≤ 1 0 5 1 \leq coins.length \leq 10^5 1coins.length105
  • 1 ≤ c o i n s [ i ] ≤ t a r g e t 1 \leq coins[i] \leq target 1coins[i]target

思路

可以通过贪心算法来解决。我们首先对硬币面值数组进行排序,然后逐步考虑每个需要添加的额外硬币。具体步骤如下:

  1. 对硬币数组进行排序,以便从小到大考虑硬币面值。
  2. 初始化需要的额外硬币数量为0,当前已经能够组成的金额为0。
  3. 遍历排序后的硬币数组,对于每个硬币面值,进行以下操作:
  • 如果当前已经能够组成的金额已经大于或等于目标金额,直接返回需要的额外硬币数量。
  • 如果当前硬币面值减去1大于当前已经能够组成的金额,需要添加额外硬币,数量为当前硬币面值减去1与当前已经能够组成的金额之间的差值。
  • 更新当前已经能够组成的金额为当前硬币面值。
  1. 如果遍历完成后,当前已经能够组成的金额仍然小于目标金额,继续添加额外硬币,数量为目标金额减去当前已经能够组成的金额。

代码

class Solution {
public:int minimumAddedCoins(vector<int>& coins, int target) {int n = coins.size(), res = 0, ssum = 0;sort(coins.begin(), coins.end());for (int i = 0; i < n; ++i) {if (ssum >= target) {return res;}while (ssum < coins[i] - 1) {++res;ssum = ssum * 2 + 1;}ssum += coins[i];}while (ssum < target) {++res;ssum = ssum * 2 + 1;}return res; }
};
/*
挺有意思的一个构造题。不难看出,当你已经可以组成1 -- i所有的数字的时候,,如果下一个出现的数字j小于等于i + 1,那么你就可以直接获得这个数字,并且能通过这个新的数字来组成1 -- i + j的所有数字。这是很好理解的一件事儿,1 -- i的所有数字你本来就有,j -- i + j的所有数字则可以通过你原本能组成的数字再加上j来获取。那么,如果下一个出现的数字j大于i + 1,这时就需要额外添加数字了。额外添加的数字自然是越大越好——也就是前一种情况里j的最大值i + 1。
*/

复杂度分析

时间复杂度

O(nlogn),遍历硬币数组的时间复杂度为 O(n),因此总的时间复杂度为 O(nlogn)。

空间复杂度

O(1)

结果

在这里插入图片描述

总结

通过贪心算法解决了硬币补充的问题,通过分析问题的特点,找到了最优的添加策略,使得所需的额外硬币数量最小化。

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

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

相关文章

剑指Offer题目笔记21(计数排序)

面试题74&#xff1a; 问题&#xff1a; ​ 输入一个区间的集合&#xff0c;将重叠的区间合并。 解决方案&#xff1a; ​ 先将所有区间按照起始位置排序&#xff0c;然后比较相邻两个区间的结束位置就能知道它们是否重叠。如果它们重叠就将它们合并&#xff0c;然后判断合并…

精选2024年最佳项目管理系统!实用推荐与详细评测

随着企业规模的扩大&#xff0c;项目量也会呈几何倍的增长&#xff0c;项目管理系统就成了企业管理必不可少的一部分。2024年优秀的项目管理系统推荐。今年为大家带来Microsoft Project、Zoho Projects、Jira以及Wrike项目管理系统评测。 什么是项目管理系统&#xff1f; 项目…

怎么更新sd-webui AUTOMATIC1111/stable-diffusion-webui ?

整个工程依靠脚本起来的&#xff1a; 可直接到stable-diffusion-webui子目录执行&#xff1a; git pull更新代码完毕后&#xff0c;删除venv的虚拟环境。 然后再次执行webui.sh&#xff0c;这样会自动重新启动stable-diffusion-webui.

springboot心灵治愈交流平台

摘 要 本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述心灵治愈交流平台的当前背景以及系统开发的…

代码随想录算法训练营第三十二天|leetcode738题

一、leetcode第738题 本题要求返回小于等于给定数字且从最高位到最低位呈单调递增的数值&#xff0c;需要从最低位向最高位遍历&#xff0c;如果最低位比其前一位小则若要使改变后数值最大需要将前一位作减一操作并记录下当前位&#xff0c;在遍历结束后将记录的当前位之后的所…

啥是MCU,MCU科普

啥是MCU&#xff0c;MCU科普 附赠自动驾驶学习资料和量产经验&#xff1a;链接 MCU是Microcontroller Unit 的简称&#xff0c;中文叫微控制器&#xff0c;俗称单片机&#xff0c;是把CPU的频率与规格做适当缩减&#xff0c;并将内存、计数器、USB、A/D转换、UART、PLC、DMA等…

Leetcode 42.接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图&#x…

多线程(19)活锁和线程饥饿

活锁&#xff08;Livelock&#xff09;和线程饥饿&#xff08;Thread Starvation&#xff09;是并发编程领域中两个至关重要且常见的问题。理解这两个概念&#xff0c;以及它们如何影响程序的执行和系统的性能&#xff0c;对于开发能够有效并行处理任务的应用程序至关重要。 1…

发表SCI论文对作者学位职位有要求吗?

SCI论文是被SCI(Scientific Citation Index&#xff0c;《科学引文索引》)收录的期刊所刊登的论文。能够在SCI上成功发表论文是证明作者的一定的能力被国际研究界所认可&#xff0c;国内的很多科研人员因此对其也是非常向往的。 那么发表SCI论文对作者学位职位有要求吗? 通常…

基于单片机智能输液器监控系统的设计

**单片机设计介绍&#xff0c;基于单片机智能输液器监控系统的设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机智能输液器监控系统的设计旨在实现对输液过程的实时监测和控制&#xff0c;以提高输液的安全性和疗效…

香港服务器与SEO的关系(香港服务器对SEO影响大吗?)

香港服务器与 SEO 的关系是一个备受关注的话题&#xff0c;不少站长在选择了香港服务器后&#xff0c;便会疑问&#xff1a;香港服务器对SEO的影响是否显著?那么&#xff0c;在这里就跟大家聊聊两者的关系以及影响大小。 其实&#xff0c;不少站长对 SEO 的这种担忧和想法是片…

发生播放错误,即将重试 jellyfin

上周在家里的小主机上部署了jellyfin&#xff0c;真香&#xff0c;手机安卓端使用无问题&#xff0c;于是今天准备在电视上安装一个 首先是直接安装的手机版客户端&#xff0c;操作卡顿&#xff0c;而且很多操作没法实现&#xff0c;于是去下了一个tv版本 安装上后发现&#…

R语言数据分析基础(一)

在R中&#xff0c;读取和操作Excel文件最常用的readxl包&#xff0c;可以读取Excel文件&#xff0c;writexl包可以写入Excel文件。以下是常见的操作&#xff1a; 安装和加载包 首先&#xff0c;需要安装和加载readxl和writexl包。 install.packages("readxl") ins…

InternLM2-lesson1

书生浦语大模型全链路开源体系 课程视频&#xff1a;https://www.bilibili.com/video/BV1Vx421X72D/ 开源历程 全面开源&#xff0c;免费商用&#xff01;&#xff01;&#xff01; internlm2模型体系 internlm2根据参数量可以分为7B和20B两个大的版本&#xff0c;每个大的…

Kubernetes篇(二)— 集群环境搭建

目录 前言一、 环境规划集群类型安装方式主机规划 二、环境搭建主机安装环境初始化安装docker安装kubernetes组件准备集群镜像集群初始化安装网络插件 三、 服务部署 前言 本章节主要介绍如何搭建kubernetes的集群环境 一、 环境规划 集群类型 kubernetes集群大体上分为两类…

qt窗口的应用与pyinstaller打包APP操作

3月29日 qt打包APP操作 1 先在windows shell 中下载打包软件Pylnstaller pip install pyinstaller2 先进入py项目所在的位置&#xff0c;再执行以下代码(我用的qt版本是PySide6可以根据自己的情况修改) pyinstaller s02.py --noconsole --hidden-import PySide6.QtXml3 因为…

软件设计不是CRUD(16):低耦合模块设计理论——行为抽象与设计模式(下)

(接上文《软件设计不是CRUD(15):低耦合模块设计理论——行为抽象与设计模式(中)》) 3.2.4、之前的业务逻辑需要关注后续逻辑的执行成败,并调整自身执行的情况 这个场景在之前场景的基础上增加了新的控制要求,具体来说就是之前已经完成的控制逻辑执行,需要在后续控制…

以太网/USB 数据采集卡 24位16通道 labview 256K同步采样

XM7016以太网SUB数据采集卡 XM7016是一款以太网/USB高速数据采集卡&#xff0c;具有16通道真差分输入&#xff0c;24位分辨率&#xff0c;单通道最高采样率256ksps. 16通道同步共计4.096Msps、精密前置增益放大、集成IEPE/ICP硬件支持的特点。本产品采用了多个高精度24位ADC单元…

leetcode-链表算法题

leetcode-链表算法题 237.删除链表中的节点 题目地址 有一个单链表的 head&#xff0c;我们想删除它其中的一个节点 node。 给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。 链表的所有值都是 唯一的&#xff0c;并且保证给定的节点 node 不是链表中的最后一个…

如何使用 WebView 将 React Native 嵌入到原生应用中

创建 React Native Web Bundle&#xff1a; 首先&#xff0c;需要使用 React Native CLI 或 Expo CLI 构建 React Native 的 Web bundle。你可以使用以下命令来构建 Web bundle&#xff1a; npx react-native bundle --platform web --entry-file index.js --bundle-output ./…