代码第三十六天:需要添加的硬币的最小数量

需要添加的硬币的最小数量

题目要求:

在这里插入图片描述

解题思路

为方便描述,把 0 也算作可以得到的数。

假设现在得到了区间 [ 0 , s − 1 ] [0,s−1] [0,s1] 中的所有整数,如果此时遍历到整数 x = c o i n s [ i ] x=coins[i] x=coins[i],那么把 [ 0 , s − 1 ] [0,s−1] [0,s1] 中的每个整数都增加 x x x,我们就得到了区间 [ x , s + x − 1 ] [x,s+x−1] [x,s+x1] 中的所有整数。

思路
c o i n s coins coins 从小到大排序,遍历 x = c o i n s [ i ] x=coins[i] x=coins[i]。分类讨论,看是否要添加数字:

  • 如果 x ≤ s x \le s xs,那么合并 [ 0 , s − 1 ] [0,s−1] [0,s1] [ x , s + x − 1 ] [x,s+x−1] [x,s+x1] 这两个区间,我们可以得到 [ 0 , s + x − 1 ] [0,s+x−1] [0,s+x1] 中的所有整数。
  • 如果 x > s x>s x>s,或者遍历完了 c o i n s coins coins 数组,这意味着我们无法得到 s s s,那么就一定要把 s s s 加到数组中(加一个比 s s s 还小的数字就没法得到更大的数,不够贪),这样就可以得到了 [ s , 2 s − 1 ] [s,2s−1] [s,2s1] 中的所有整数,再与 [ 0 , s − 1 ] [0,s−1] [0,s1] 合并,可以得到 [ 0 , 2 s − 1 ] [0,2s−1] [0,2s1] 中的所有整数。然后再考虑 x x x 2 s 2s 2s 的大小关系,继续分类讨论。

s > t a r g e t s s>targets s>targets时,我们就得到了 [ 1 , t a r g e t ] [1,target] [1,target] 中的所有整数,退出循环。

代码


class Solution:def minimumAddedCoins(self, coins: List[int], target: int) -> int:coins.sort()ans, s, i = 0,1,0while s<= target:if i<len(coins) and coins[i]<=s:s += coins[i]i+=1else:s *= 2ans +=1return ans

复杂度分析

  • 时间复杂度: O ( n l o g ⁡ n + l o g ⁡ t a r g e t ) O(nlog⁡n+log⁡target) O(nlogn+logtarget),其中 n n n c o i n s coins coins 的长度。 s s s 至多翻倍 O ( l o g ⁡ t a r g e t ) O(log⁡target) O(logtarget) 次。瓶颈主要在排序上。
    空间复杂度: O ( 1 ) O(1) O(1)。忽略排序的栈开销。

参考

灵茶山艾府

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

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

相关文章

win10 安装kubectl,配置config连接k8s集群

安装kubectl 按照官方文档安装&#xff1a;https://kubernetes.io/docs/tasks/tools/install-kubectl-windows/ curl安装 &#xff08;1&#xff09;下载curl安装压缩包: curl for Windows &#xff08;2&#xff09;配置环境变量&#xff1a; 用户变量&#xff1a; Path变…

Python之Opencv教程(2):图像边缘检测

1、什么是边缘检测 OpenCV中的边缘检测是一种常见的图像处理技术&#xff0c;用于检测图像中物体边缘的位置。常用的边缘检测算法包括Sobel算子、Scharr算子、Laplacian算子和Canny边缘检测算法等。下面将介绍使用OpenCV实现这些边缘检测算法的方法。 2、边缘检测的作用 边缘…

STM32 字符数组结束符 “\0”

STM32 字符数组结束符 “\0” 使用字符数组使用printf&#xff0c;string参考 使用字符数组 使用STM32的串口发送数据&#xff0c;核心代码如下&#xff1a; char str[] "hello world!\n\r";while(1) {HAL_UART_Transmit(&huart2, str, sizeof (str), 10);HAL…

【力扣刷题日记】1173.即时食物配送I

前言 练习sql语句&#xff0c;所有题目来自于力扣&#xff08;https://leetcode.cn/problemset/database/&#xff09;的免费数据库练习题。 今日题目&#xff1a; 1173.即时食物配送I 表&#xff1a;Delivery 列名类型delivery_idintcustomer_idintorder_datedatecustomer…

Java学生管理系统(附完整代码)两个版本

目录 学生管理系统 需求&#xff1a; 分析&#xff1a; 初始菜单&#xff1a; 学生类&#xff1a; 添加功能&#xff1a; 删除功能&#xff1a; 修改功能&#xff1a; 查询功能&#xff1a; 设计图 学生管理系统(基础版)独立开发 所用方法 代码: Student类: Stud…

LabVIEW双通道太阳射电频谱观测系统

LabVIEW双通道太阳射电频谱观测系统 开发了一个基于LabVIEW平台开发的双通道高速太阳射电频谱观测系统。该系统实时监测太阳射电爆发&#xff0c;具有随机性、持续时间短、变化快等特点。通过高速信号采集卡实现1.5 GS/s的信号采集&#xff0c;时间分辨率可达4ms&#xff0c;频…

类的新功能

类的新功能 默认成员函数 在C11之前&#xff0c;一个类中有如下六个默认成员函数&#xff1a; 构造函数。拷贝构造函数赋值重载析构函数取地址重载函数const取地址函数 其中前四个默认成员函数最重要&#xff0c;后面两个默认成员函数一般不会用到&#xff0c;这里默认成员…

PHPCMS v9城市分站插件

PHPCMS自带的有多站点功能&#xff0c;但是用过的朋友都知道&#xff0c;自带的多站点功能有很多的不方便之处&#xff0c;例如站点栏目没法公用&#xff0c;每个站点都需要创建模型、每个站点都需要单独添加内容&#xff0c;还有站点必须静态化。如果你内容很多这些功能当然无…

虚函数和纯虚函数

虚函数 被virtual修饰的成员函数称为虚函数 定义一个函数为虚函数&#xff0c;是为了使用基类指针调用子类函数。虚函数&#xff0c;不代表函数不被实现。只有纯虚函数才不被实现&#xff0c;纯虚函数定义了一个接口&#xff0c;起到规范的作用。 #include <iostream>…

【AXIS】AXI-Stream FIFO设计实现(四)——异步时钟

前文介绍了几种同步时钟情况下的AXI Stream FIFO实现方式&#xff0c;一般来说&#xff0c;FIFO也需要承担异步时钟域模块间数据传输的功能&#xff0c;本文介绍异步AXIS FIFO的实现方式。 如前文所说&#xff0c;AXI-Stream FIFO十分类似于FWFT异步FIFO&#xff0c;推荐参考前…

B201-SpringBoot整合Shiro

目录 ShiroShiro核心组件SpringBoot整合Shiro1.创建新SpringBoot项目和导包2.自定义Shiro过滤器Realm3.配置类ShiroConfig编写认证和授权规则案例&#xff1a;案例思路改造ShiroConfigAccountController配置视图解析器templates下新建3个页面启动测试 登录认证设置自定义登录页…

【C++庖丁解牛】自平衡二叉搜索树--AVL树

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1 AVL树的概念2. AVL…

探索未来的视觉智能:AI视频分析系统的崭新时代

随着人工智能技术的飞速发展&#xff0c;AI视频分析系统正逐渐成为各行业的关注焦点。这些系统不仅可以帮助安防领域实现更智能化的监控&#xff0c;还能在零售、交通、医疗等领域发挥重要作用。本文将深入探讨AI视频分析系统的崭新时代&#xff0c;揭示其未来发展的无限可能。…

2-HDFS常用命令及上传下载流程

HDFS NameNode 安全模式(safemode) 当NameNode被重启的时候&#xff0c;自动进入安全模式 在安全模式中&#xff0c;NameNode首先会触发edits_inprogress文件的滚动。滚动完成之后&#xff0c;更新fsimage文件 更新完成之后&#xff0c;NameNode会将fsimage文件中的元数据加…

基于java+SpringBoot+Vue的网上书城管理系统设计与实现

基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 网上书城管理系统是一个基于互联网的在线购书平台&#…

文献学习-23-MRM:用于遗传学医学图像预训练的掩码关系建模

MRM: Masked Relation Modeling for Medical Image Pre-Training with Genetics Authors: Qiushi Yang, Wuyang Li, Baopu Li, Yixuan Yuan Source: ICCV 2023 Abstract: 关于自动多模态医疗诊断的 ODERN 深度学习技术依赖于大量的专家注释&#xff0c;这既耗时又令人望而却…

【Spring MVC】快速学习使用Spring MVC的注解及三层架构

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Spring MVC】快速学习使用Spring MVC的注解及三层架构 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 Spring Web MVC一: 什么是Spring Web MVC&#xff1…

何时应用 RAG 与微调

充分发挥 LLM 的潜力需要在检索增强生成&#xff08;RAG&#xff09;和微调之间选择正确的技术。 让我们来看看何时对 LLM、较小的模型和预训练模型使用 RAG 与微调。我们将介绍&#xff1a; LLM 和 RAG 的简要背景RAG 相对于微调 LLM 的优势何时针对不同模型大小对 RAG 进行…

python 贪吃蛇

main.py #!/usr/bin/env python3 # -*- coding: utf-8 -*-import pygame # 导入pygame模块from setting import Setting import startmain as sm from pygame.sprite import Groupdef InitGame():print("InitGame")pygame.init() #初始化pygameai_settings Se…

【图轮】【 最小生成树】【 并集查找】1489. 找到最小生成树里的关键边和伪关键边

本文涉及知识点 图轮 最小生成树 并集查找 关键边 1489. 找到最小生成树里的关键边和伪关键边 给你一个 n 个点的带权无向连通图&#xff0c;节点编号为 0 到 n-1 &#xff0c;同时还有一个数组 edges &#xff0c;其中 edges[i] [fromi, toi, weighti] 表示在 fromi 和 to…