Leetcode面试经典150题-322.零钱兑换

给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。

计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。

你可以认为每种硬币的数量是无限的。

示例 1:

输入:coins = [1, 2, 5], amount = 11
输出:3 
解释:11 = 5 + 5 + 1

示例 2:

输入:coins = [2], amount = 3
输出:-1

示例 3:

输入:coins = [1], amount = 0
输出:0

提示:

  • 1 <= coins.length <= 12
  • 1 <= coins[i] <= 231 - 1
  • 0 <= amount <= 104

这个题很容易就写成二维的动态规划了,使用一维动态规划需要理清思路,其他的就不多说了,上代码,看不懂的请留言或者私信,收到第一时间解答

class Solution {/**本题是零钱兑换系列问题,思路是动态规划,边解题边解释思路吧 */public int coinChange(int[] coins, int amount) {/**如果只有一种货币,能除尽就直接返回,除不尽返回-1 */if(coins.length == 1) {return amount % coins[0] == 0? amount / coins[0] : -1;}/**如果不止一个,使用动态规划进行解题,先定义动态规划数组dp, dp[i]的含义是i这个amount最少由多少个硬币凑成我们从小金额到大金额进行循环,比如我们的硬币分别是1,2,5,dp[1]=1 dp[2]=1 dp[3]=2dp[4]=Math.min(dp[4-1]+1, dp[4-2]+1)=2dp[5]=Math.min(dp[5-1]+1, dp[5-2]+1, dp[5-5]+1)括号里的三个分别表示凑够了4再加个1元,凑够了3再加一张2元,凑够了0再加一张5元...dp[11]= Math.min(dp[11-1]+1, dp[11-2]+1,dp[11-5]+1)*/int[] dp = new int[amount + 1];/**先都设置为最大值 */Arrays.fill(dp, Integer.MAX_VALUE);/**0这个金额0个硬币就能凑出来,所以dp[0]=0 */dp[0] = 0;/**给硬币数组排个序 */Arrays.sort(coins);/**从1到amount进行遍历 */for(int curAmount = 1; curAmount <= amount ; curAmount++) {for(int i = 0; i < coins.length; i++) {/**如果小于0了,我们dp数组就越界了,而且负数不可能由任何树组成就算它存在也应该是最大值 */if(curAmount - coins[i] < 0) {break;}dp[curAmount] = Math.min(dp[curAmount], dp[curAmount-coins[i]] == Integer.MAX_VALUE? Integer.MAX_VALUE : dp[curAmount-coins[i]] + 1);}}return dp[amount] == Integer.MAX_VALUE? -1 : dp[amount];}
}

时间复杂度肯定是最低了,表现一般般,凑活这看吧

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

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

相关文章

Java项目实战II基于Java+Spring Boot+MySQL的大创管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 在当前创新创业氛围浓厚的背景下&#xff0c;大学生创新创业项目&#xff08;简称“大创”&#xff0…

【MySQL】-- 数据库基础

文章目录 1. 数据库简介1.1 什么是数据库1.2 什么是关系型数据库 2. 客户端与服务器的通讯方式2.1 CS架构 3. MySQL架构 1. 数据库简介 1.1 什么是数据库 什么是数据库&#xff1f; 组织和保存数据的应用程序。数据库和之前学的数据结构有什么关系&#xff1f; 数据结构是组织数…

第168天:应急响应-ELK 日志分析系统Yara规则样本识别特征提取规则编写

目录 案例一&#xff1a;ELK 搭建使用-导入文件&监控日志&语法筛选 案例二&#xff1a;Yara 规则使用-规则检测&分析特征&自写规则 案例一&#xff1a;ELK 搭建使用-导入文件&监控日志&语法筛选 该软件是专业分析日志的工具&#xff0c;但是不支持安…

Java应用程序的服务器有哪些?

1.Tomcat、Jetty 和 JBoss 区别&#xff1f; Apache Tomcat、Jetty 和 JBoss都是用于部署Java应用程序的服务器&#xff0c;它们都支持Servlet、JSP和其他Java EE&#xff08;现在称为Jakarta EE&#xff09;技术。尽管它们有一些相似的功能&#xff0c;但它们之间还是存在一些…

快速了解:MySQL InnoDB和MyISAM的区别

目录 一、序言二、InnoDB和MyISAM对比1、InnoDB特性支持如下2、MyISAM特性支持如下 三、两者核心区别1、事务支持2、锁机制3、索引结构4、缓存机制5、故障恢复6、使用场景 一、序言 在MySQL 8.0中&#xff0c;InnoDB是默认的存储引擎。除了InnoDB&#xff0c;MySQL还支持其它的…

小程序原生-利用setData()对不同类型的数据进行增删改

1. 声明和绑定数据 wxml文件 <view> {{school}} </view> <view>{{obj.name}}</view> <view id"{{id}}" > 绑定属性值 </view> <checkbox checked"{{isChecked}}"/> <!--算数运算--> <view>{{ id …

Python 课程20-Scikit-learn

前言 Scikit-learn 是 Python 中最流行的机器学习库之一&#xff0c;它提供了多种用于监督学习和无监督学习的算法。Scikit-learn 的特点是简单易用、模块化且具有高效的性能。无论是初学者还是专业开发者&#xff0c;都可以借助它进行快速原型设计和模型开发。 在本教程中&a…

栈与队列相关知识(二)

目录 Java中栈&#xff08;Stack&#xff09; 一. 常用方法 1.push(E item) 2.pop() 3.peek() 4.empty() 二. 常用方法扩展 1. search(Object o) 2. clone() 3. contains(Object o) 4. size() 5. toArray() Java中队列&#xff08;Queue&#xff09; 一.常用方法&…

android compose ScrollableTabRow indicator 指示器设置宽度

.requiredWidth(30.dp) Box(modifier Modifier.background(Color.LightGray).fillMaxWidth()) {ScrollableTabRow(selectedTabIndex selectedTabIndex, // 默认选中第一个标签containerColor ColorPageBg,edgePadding 1.dp, // 内容与边缘的距离indicator { tabPositions…

《OpenCV 计算机视觉》—— 图像拼接

还未写完&#xff01;&#xff01;&#xff01; 下面是两张需要拼接的图片 完整代码&#xff1a; import cv2 import numpy as np import sysdef cv_show(name, img):cv2.imshow(name, img)cv2.waitKey(0)def detectAndDescribe(image):gray cv2.cvtColor(image, cv2.COLOR_…

C#测试调用Ghostscript.NET浏览PDF文件

Ghostscript.NET是针对Ghostscript的C#封装库&#xff0c;支持解析PostScript语言、操作PDF文件等。使用Ghostscript.NET的GhostscriptViewer 模块可以以图片形式查看PDF文档。本文学习并测试调用Ghostscript.NET模块打开及浏览PDF文件的基本用法。   Ghostscript.NET目前主要…

线性模型到神经网络

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初始神经网络&#xff09;的最后&#xff0c;我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k&#xff0c;当我们在想让模型更加准确的时候&#xff0c;是做不到的&#xff0c;因为我们…

网站建设中常见的网站后台开发语言有哪几种,各自优缺点都是什么?

市场上常见的网站后台开发语言有PHP、Python、JavaScript、Ruby、Java和.NET等。这些语言各有其独特的优缺点&#xff0c;适用于不同的开发场景和需求。以下是对这些语言的具体介绍&#xff1a; PHP 优点&#xff1a;PHP是一种广泛用于Web开发的动态脚本语言&#xff0c;特别适…

python UNIT 3 选择与循环(2)

目录 1。循环的优化 经典优化分析&#xff1a; 未优化的代码&#xff1a; 细节分析&#xff1a; 优化后的代码&#xff1a; 优化的细节&#xff1a; 性能对比 优化的关键在于&#xff1a; 经典习题讲解&#xff1a;(紫色的解析请重点关注一下) 1。例三 个人代码解析…

Go实现RabbitMQ消息模式

【目标】 go实现RabbitMQ简单模式和work工作模式 go实现RabbitMQ 消息持久化和手动应答 go实现RabbitMQ 发布订阅模式 go使用MQ实现评论后排行榜更新 1. go实现简单模式 编写路由实现生产消息 实现生产消息 MQ消息执行为命令行执行&#xff0c;所以创建命令行执行函数mai…

机器学习-KNN分类算法

1.1 KNN分类 KNN分类算法&#xff08;K-Nearest-Neighbors Classification&#xff09;&#xff0c;又叫K近邻算法。它是概念极其简单&#xff0c;而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。 KNN分类算法的核心思想&#xff1a;如果一个样本在特征空间中的k个最…

聊一聊 C#中有趣的 SourceGenerator生成器

一&#xff1a;背景 1. 讲故事 前些天在看 AOT的时候关注了下 源生成器&#xff0c;挺有意思的一个东西&#xff0c;今天写一篇文章简单的分享下。 二&#xff1a;源生成器探究之旅 1. 源生成器是什么 简单来说&#xff0c;源生成器是Roslyn编译器给程序员开的一道口子&am…

【架构】NewSQL

文章目录 NewSQLTiDBTiDB 主要组件特点使用场景安装与部署 推荐阅读 NewSQL NewSQL是一种数据库管理系统(DBMS)的类别&#xff0c;它结合了NoSQL数据库的可扩展性和传统SQL数据库的事务一致性。具体来说&#xff0c;NewSQL数据库旨在解决传统关系型数据库在处理大规模并发事务…

我是如何将 Java 基础 docker 镜像大小从 674Mb 优化到 58Mb的

我是如何将 Java 基础 docker 镜像大小从 674Mb 优化到 58Mb的 如果您是 Java 开发人员&#xff0c;并且正在使用 Docker 打包应用程序&#xff0c;您可能已经注意到&#xff0c;即使是“hello world”类型的项目&#xff0c;最终镜像的大小也可能非常大。在本文中&#xff0c…

D18【python接口自动化学习】-python基础之内置数据类型

day18 综合练习&#xff1a;实现手机通讯录&#xff08;下&#xff09; 学习日期&#xff1a;20240925 学习目标&#xff1a;内置数据类型--27 小试牛刀&#xff1a;如何使用类型转换实现手机通讯录&#xff08;下&#xff09; 学习笔记&#xff1a; 实现手机通讯录 案例文…