【算法与数据结构】322、LeetCode零钱兑换

文章目录

  • 一、题目
  • 二、解法
  • 三、完整代码

所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。

一、题目

在这里插入图片描述

二、解法

  思路分析:本题可以抽象成一个完全背包问题。

  • 第一步, d p [ j ] dp[j] dp[j]的含义。 d p [ j ] dp[j] dp[j]代表的是背包容量 j j j时,组成背包的最少物品数。
  • 第二步,递推公式。 d p [ j ] dp[j] dp[j]可以由 d p [ j − n u m s [ i ] ] dp[j-nums[i]] dp[jnums[i]]得出,在此基础上加上1即可。因为要去最小的组合数量,所有最终的递归公式变成 d p [ j ] = m a x ( d p [ j − n u m s [ i ] ] , d p [ j ] ) dp[j]=max(dp[j-nums[i]], dp[j]) dp[j]=max(dp[jnums[i]],dp[j])
  • 第三部,元素初始化。 d p [ 0 ] dp[0] dp[0]初始化为0。因为有min函数的关系,动态数组的其他元素初始化应该为int类型的最大整数。
  • 第四部,递归顺序。本题无所谓组合和排列问题,所以先遍历物品后遍历背包容量还是先遍历背包容量后遍历物品都可以。
  • 第五步,打印结果。最终的dp数组会剩下可以由硬币组合成功的零钱,结果为其最小数量,直接返回;而不能组合出来的零钱结果为INT_MAX,我们返回-1。
      程序如下
class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for (int i = 0; i < coins.size(); i++) {    // 遍历物品for (int j = coins[i]; j <= amount; j++) {  // 遍历背包容量if (dp[j - coins[i]] != INT_MAX) {dp[j] = min(dp[j - coins[i]] + 1, dp[j]);}}}return dp[amount] == INT_MAX ? -1 : dp[amount];}
};

复杂度分析:

  • 时间复杂度: O ( n ∗ a m o u n t ) O(n*amount) O(namount),n为coins数组长度。
  • 空间复杂度: O ( a m o u n t ) O(amount) O(amount)

三、完整代码

# include <iostream>
# include <vector>
using namespace std;class Solution {
public:int coinChange(vector<int>& coins, int amount) {vector<int> dp(amount + 1, INT_MAX);dp[0] = 0;for (int i = 0; i < coins.size(); i++) {    // 遍历物品for (int j = coins[i]; j <= amount; j++) {  // 遍历背包容量if (dp[j - coins[i]] != INT_MAX) {dp[j] = min(dp[j - coins[i]] + 1, dp[j]);}}}return dp[amount] == INT_MAX ? -1 : dp[amount];}
};int main() {//vector<int> coins = { 1, 2, 5 };vector<int> coins = { 2 };int amount = 3;Solution s1;int result = s1.coinChange(coins, amount);cout << result << endl;system("pause");return 0;
}

end

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

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

相关文章

Unity之Cinemachine教程

前言 Cinemachine是Unity引擎的一个高级相机系统&#xff0c;旨在简化和改善游戏中的相机管理。Cinemachine提供了一组强大而灵活的工具&#xff0c;可用于创建令人印象深刻的视觉效果&#xff0c;使开发人员能够更轻松地掌控游戏中的摄像机行为。 主要功能和特性包括&#x…

Springboot+vue的医院后台管理系统(有报告),Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的医院后台管理系统&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的医院后台管理系统&#xff0c;采用M&#xff08…

LeetCode、875. 爱吃香蕉的珂珂【中等,最小速度二分】

文章目录 前言LeetCode、875. 爱吃香蕉的珂珂【中等&#xff0c;最小速度二分】题目及分类思路分析及代码实现代码优化 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Ja…

如何修改flutter的minSdkVersion版本?

在使用第三方插件的时候&#xff0c;插件对最低的 minSdkVersion版本是有要求的&#xff0c;你比如flutter 插件 webview_flutter 就会报一下错&#xff1a; minSdkVersion 16 cannot be smaller than version 19 declared in library 解决方法①&#xff1a; 这个时候我们需…

Python爬虫框架选择与使用:推荐几个常用的高效爬虫框架

目录 前言 一、Scrapy框架 1. 安装Scrapy 2. Scrapy示例代码 3. 运行Scrapy爬虫 二、Beautiful Soup库 1. 安装Beautiful Soup 2. Beautiful Soup示例代码 3. 运行Beautiful Soup代码 三、Requests库 1. 安装Requests库 2. Requests示例代码 3. 运行Requests代码 …

【蓝桥杯--图论】最小生成树prim、kruskal

今日语录&#xff1a;成功不是终点&#xff0c;失败不是致命&#xff0c;勇气才是取胜的关键。 文章目录 prim算法kruskal算法(稀疏图) prim算法 #include <cstring> #include <algorithm> #include <iostream>#define _CRT_SECURE_NO_WARNINGS using names…

8 种网络协议

什么是网络协议&#xff1f; 网络协议就是计算机之间沟通的语言&#xff0c;为了有效地交流&#xff0c;计算机之间需要一种共同的规则或协议&#xff0c;就像我们和老外沟通之前&#xff0c;要先商量好用哪种语言&#xff0c;要么大家都说中文&#xff0c;要么大家都说英语&a…

微信小程序实现长按 识别图片二维码

第一种方案&#xff08;只需要在image里面加一个属性就可以了&#xff09; show-menu-by-longpress“{{true}}” <image show-menu-by-longpress"{{true}}" src"{{sysset.dyqewm}}" />第二种方案 放大预览图片&#xff0c;长按识别二维码 wxml <…

数灵通实现抖音跳转企业微信啦

抖音是一款流行的短视频应用&#xff0c;用户可以通过简洁、有趣的短视频形式创作和分享内容。 对于企业而言&#xff0c;抖音拥有庞大的用户基础和广泛的影响力&#xff0c;因此企业希望能够利用抖音的平台来推广自己的企业微信账号&#xff0c;与用户建立更紧密的沟通和联系…

Xftp连接不上Linux虚拟机的原因解决方法

前言&#xff1a; 在当今数字化时代&#xff0c;远程连接到Linux虚拟机是许多开发者和系统管理员日常工作的一部分。然而&#xff0c;有时候&#xff0c;面对Xftp连接不上Linux虚拟机的问题&#xff0c;我们可能感到困惑和无措。这个看似小问题可能导致工作中断&#xff0c;因…

基于taro搭建小程序多项目框架

前言 为什么需要这样一个框架&#xff0c;以及这个框架带来的好处是什么&#xff1f; 从字面意思上理解&#xff1a;该框架可以用来同时管理多个小程序&#xff0c;并且可以抽离公用组件或业务逻辑供各个小程序使用。当你工作中面临这种同时维护多个小程序的业务场景时&#xf…

Unity 桥接模式(实例详解)

文章目录 示例1&#xff1a;角色与装备系统示例2&#xff1a;UI控件库示例3&#xff1a;渲染引擎模块示例4&#xff1a;AI决策树算法示例5&#xff1a;物理模拟引擎 在Unity游戏开发中&#xff0c;桥接模式&#xff08;Bridge Pattern&#xff09;是一种设计模式&#xff0c;它…

扩散模型公式推导

这篇文章将尝试推导扩散模型 DDPM 中涉及公式&#xff0c;主要参考两个 B 站视频&#xff1a; 大白话AI狗中赤兔 本文所用 PPT 元素均来自 UP 主&#xff0c;狗中赤兔和大白兔AI&#xff0c;特此感谢。 在证明开始&#xff0c;我们需要先对扩散模型有一个整体的认知。扩散模型…

【心得】java从CC1链入门CC链个人笔记

来劲了&#xff0c;感觉离真正的CTF又近了一步。 本文仅从一个萌新的角度去谈&#xff0c;如有纰漏&#xff0c;纯属蒟蒻。 目录 CC链概念 CC链学习前置知识 CC1链 Version1 Version2 Version3 CC链概念 CC链 Commons Collections apache组织发布的开源库 里面主要对…

matlab appdesigner系列-常用19-超链接

超链接&#xff0c;可以执行的有2个&#xff0c;外部网页链接 和 外部matlab文件&#xff08;.m文件&#xff09; 示例&#xff1a;准备两个外部链接、文件 网页链接&#xff1a; https://www.mathworks.com/products/matlab.html matlab文件&#xff0c;Hyperlink.m msgb…

git bash右键菜单失效解决方法

git bash右键菜单失效解决方法 这几天重新更新了git&#xff0c;直接安装新版本后&#xff0c;右键菜单失效找不到了。找了好几个博客&#xff0c;发现都不全面&#xff0c;最后总结一下解决方法&#xff1a; &#xff08;1&#xff09;按winr&#xff0c;输入regedit打开注册…

安卓自动缩放布局

AutoScalingLayout 适用于 Android 的自动缩放布局。 替换布局&#xff1a; 我们只需要替换根布局所需的自动缩放&#xff0c;子布局也将实现自动缩放。 原始布局AutoScalingLayout相对布局ASRelativeLayout线性布局ASLinearLayoutFrameLayout&#xff08;框架布局&#xff…

沃尔沃机器人的电动汽车部署战略

原创 | 文 BFT机器人 前言&#xff1a; 随着环保意识的提高和科技的进步&#xff0c;电动汽车在全球范围内正逐渐成为交通出行的主要方式。而在这个转变过程中&#xff0c;制造自动化的技术发展起到了关键的作用。目前&#xff0c;全球各大汽车制造商都在积极投入电动汽车的研…

操作系统-虚拟机(传统计算机 虚拟机 两类VMM对比 指令等级 特权与敏感)

文章目录 传统计算机虚拟机VMM的对比支持虚拟化的CPU通常分更多指令等级&#xff08;特权 敏感&#xff09; 传统计算机 传统物理机只有一个操作系统 两个进程在一个操作系统上运行会存在一些隐患&#xff08;相互影响 争夺资源等&#xff09; 解决方法&#xff1a;如果各个进…

[Linux]HTTP状态响应码列举

1xx&#xff1a;信息响应类&#xff0c;表示接收到请求并且继续处理 2xx&#xff1a;处理成功响应类&#xff0c;表示动作被成功接收、理解和接受 3xx&#xff1a;重定向响应类&#xff0c;为了完成指定的动作&#xff0c;必须接受进一步处理 4xx&#xff1a;客户端错误&#x…