LeetCode 322. 零钱兑换(DP)

文章目录

    • 1. 题目信息
    • 2. 解题
      • 2.1 回溯穷举
      • 2.2 动态规划

1. 题目信息

给定不同面额的硬币 coins 和一个总金额 amount。
编写一个函数来计算可以凑成总金额所需的最少的硬币个数
如果没有任何一种硬币组合能组成总金额,返回 -1。

示例 1:
输入: coins = [1, 2, 5], amount = 11
输出: 3 
解释: 11 = 5 + 5 + 1示例 2:
输入: coins = [2], amount = 3
输出: -1说明:
你可以认为每种硬币的数量是无限的。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/coin-change
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 518. 零钱兑换 II(动态规划)

2.1 回溯穷举

超时
在这里插入图片描述

class Solution//回溯
{
public:int coinChange(vector<int>& coins, int amount){int minPieces = INT_MAX;money(coins, amount, 0, 0, minPieces);if(minPieces != INT_MAX)return minPieces;elsereturn -1;}void money(vector<int>& coins, int &amount, long curMoney, int curPieces, int &minPieces){if(curMoney > amount){curPieces = INT_MAX;//表示不存在return;}if(curMoney == amount){if(curPieces < minPieces)minPieces = curPieces;return;}for(int i = 0; i < coins.size(); ++i){money(coins, amount,curMoney+coins[i], curPieces+1, minPieces)}}
};

2.2 动态规划

states[i]表示找 i 元需要的最少张数
那么states[i] = min{states[i-coins[j]] | j = 0,1,…coins.size() }+1
在这里插入图片描述

class Solution {
public:int coinChange(vector<int>& coins, int amount) {if(amount < 1)return 0;int states[amount+1];int i, j;for(i = 0; i <= amount; ++i)states[i] = amount+1;//找i元钱,不可能需要amount+1张states[0] = 0;for(i = 0; i <= amount; ++i){for(j = 0; j < coins.size(); ++j){if(i-coins[j] >= 0 && states[i] > states[i-coins[j]]+1){states[i] = states[i-coins[j]]+1;}}}if(states[amount] != amount+1)return states[amount];elsereturn -1;}
};
class Solution { //2020.3.8
public:int coinChange(vector<int>& coins, int amount) {if(amount <= 0)return 0;int n = coins.size(), j, m;vector<int> dp(amount+1, INT_MAX);dp[0] = 0;for(j = 0; j <= amount; ++j)//遍历所有的金额数{if(dp[j] != INT_MAX){for(m = 0; m < n; ++m){if(j <= amount-coins[m])dp[j+coins[m]] = min(dp[j]+1, dp[j+coins[m]]);}}}if(dp[amount] != INT_MAX)return dp[amount];return -1;}
};

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

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

相关文章

服务器使用

杀死用户lyli的所有进程 killall -u lyli杀是PID为19347的进程 kill -s 9 19347查看CPU的使用情况 free -h 查看进程实时情况 top一般有用的就这两个&#xff0c;RES是实际占了多少内存&#xff0c;%CPU除以100%就是占了多少块CPU

可以闭眼入的O'REILLY机器学习神书出新版了!

传说中的机器学习“四大名著”中最适合入门的一本——“蜥蜴书”新版来了&#xff01;这本书的英文原版是美国亚马逊AI霸榜图书&#xff0c;在人工智能、计算机神经网络、计算机视觉和模式识别三大榜单中&#xff0c;均为榜首&#xff01;国内外好评率均超过90%&#xff01;读者…

论文浅尝 | 基于知识库的神经网络问题生成方法

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生&#xff0c;研究方向为跨语言知识图谱问答。来源&#xff1a;NLPCC2018链接&#xff1a;http://tcci.ccf.org.cn/conference/2018/papers/EV7.pdf问题背景与动机作者认为&#xff0c;目前的问题语料生成主要依赖于人…

何使用BERT模型实现中文的文本分类

原文网址&#xff1a;https://blog.csdn.net/Real_Brilliant/article/details/84880528 如何使用BERT模型实现中文的文本分类前言Pytorchreadme参数表算法流程1. 概述2. 读取数据3. 特征转换4. 模型训练5. 模型测试6. 测试结果7. 总结前言 Google官方BERT代码&#xff08;Tenso…

LeetCode 152. 乘积最大子序列(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个整数数组 nums &#xff0c;找出一个序列中乘积最大的连续子序列&#xff08;该序列至少包含一个数&#xff09;。 示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。 示例 2:输入: [-2,0,-1] 输出: 0 解释…

YouTube深度学习推荐系统的十大工程问题

文 | 王喆源 | https://zhuanlan.zhihu.com/p/52504407这篇文章主要介绍了YouTube深度学习系统论文中的十个工程问题&#xff0c;为了方便进行问题定位&#xff0c;我们还是简单介绍一下背景知识&#xff0c;简单回顾一下YouTube的深度推荐系统论文Deep Neural Networks for Yo…

RPC框架的实现原理,及RPC架构组件详解

RPC的由来 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;常规的垂直应用架构已无法应对&#xff0c;分布式服务架构以及流动计算架构势在必行&#xff0c;亟需一个治理系统确保架构有条不紊的演进。 单一应用架构 当网站流量很小时&#xff0c;只需一个应…

论文浅尝 | 时序与因果关系联合推理

论文笔记整理&#xff1a;李昊轩&#xff0c;南京大学硕士&#xff0c;研究方向为知识图谱、自然语言处理。来源&#xff1a;ACL2018链接&#xff1a;https://www.aclweb.org/anthology/P18-1212动机理解事件之间的时间和因果关系是一项基本的自然语言理解任务。由于原因一定先…

LeetCode 64. 最小路径和(DP)

文章目录1. 题目信息2. 解题1. 题目信息 给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 示例:输入: [[1,3,1],[1,5,1],[4,2,1] ] 输出: 7 解释…

加快读博失败的10种方法

文 | 德先生源 | 知乎博士难毕&#xff0c;全球皆如此。差不多每个学校都有1/3到一半的博士研究生拿不到学位。读博失败不仅本人难受&#xff0c;导师也不好过。为了帮助自己的博士生们顺利毕业&#xff0c;犹他大学的Matt Might教授&#xff08;计算机科学家&#xff0c;生物学…

要成为一个 Java 架构师得学习哪些知识以及方法?

“ 最近在架构师线下实战中&#xff0c;被问到最多的一个问题&#xff0c;就是要成为一个 Java 架构师得学习哪些知识&#xff0c;以及怎样才能做到架构师这个级别&#xff1f; 今天主要澄清几个关于架构师的几大误区。 架构师并不是人人都能做到的&#xff0c;如果你能走到…

论文浅尝 | 一种可解释的语义匹配复值网络

笔记整理&#xff1a;耿玉霞&#xff0c;浙江大学直博生。研究方向&#xff1a;知识图谱&#xff0c;零样本学习&#xff0c;自然语言处理等。论文链接&#xff1a;https://arxiv.org/pdf/1904.05298.pdf本文是发表在 NAACL 2019 上的最佳可解释性论文。受量子力学中数学模型的…

指针都没搞懂,还能算得上 C++ 老司机?

在工业界&#xff0c;有这样一个规律&#xff1a;“ 但凡能用其他语言的都不会用C&#xff0c;只能用C的必然用C。”但是&#xff0c;C的学习和项目开发都比较困难。一个有经验的老手也经常搞出野指针&#xff0c;内存泄露等bug&#xff0c;包括我自己在学C的时候也非常痛苦。所…

DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用+距离运算

在NLP领域&#xff0c;语义相似度的计算一直是个难题&#xff1a;搜索场景下query和Doc的语义相似度、feeds场景下Doc和Doc的语义相似度、机器翻译场景下A句子和B句子的语义相似度等等。本文通过介绍DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用&#xff…

如何才能真正的提高自己,真正成为一名出色的架构师?

“ 有读者朋友给我留言&#xff0c;如何才能真正的提高自己&#xff0c;成为一名架构师&#xff0c;有学习各种语言的小伙伴。 这里我结合我的学习方法论&#xff0c;再结合我自己的经验&#xff0c;分享部分心得&#xff0c;希望对你有所帮助。 欢迎小伙伴留言给到你现在遇…

论文浅尝 | 从知识图谱流中学习时序规则

论文笔记整理&#xff1a;汪寒&#xff0c;浙江大学硕士&#xff0c;研究方向为知识图谱、自然语言处理。链接&#xff1a;http://ceur-ws.org/Vol-2350/paper15.pdf动机知识图谱是现在十分流行的数据管理方式&#xff0c;在最近几年应用广泛。但目前的基于KG的规则挖掘主要都是…

如何选择数据结构和算法(转)

文章目录1. 时间、空间复杂度 ! 性能2. 抛开数据规模谈数据结构和算法都是“耍流氓”3. 结合数据特征和访问方式来选择数据结构4. 区别对待IO密集、内存密集和计算密集5. 善用语言提供的类&#xff0c;避免重复造轮子6. 千万不要漫无目的地过度优化熟知每种数据结构和算法的功能…

Linux服务器安装cuda,cudnn,显卡驱动和pytorch超详细流程

原文链接&#xff1a;https://blog.csdn.net/kingfoulin/article/details/98872965 基本的环境 首先了解自己服务器的操作系统内核版本等信息&#xff1a; 查看自己操作系统的版本信息&#xff1a;cat /etc/issue或者是 cat /etc/lsb-release等命令 查看服务器显卡信息&…

自训练:超越预训练,展现强大互补特性的上分新范式!

文 | 香侬科技编 | 兔子酱背景预训练&#xff08;Pre-training&#xff09;模型自BERT问世以来就一发不可收拾&#xff0c;目前已经在自然语言理解和生成两个方面取得了突破性成就。但是&#xff0c;作为它的一个“兄弟”&#xff0c;自训练&#xff08;Self-training&#xff…

论文浅尝 | 通过文本到文本神经问题生成的机器理解

论文笔记整理&#xff1a;程茜雅&#xff0c;东南大学硕士&#xff0c;研究方向&#xff1a;自然语言处理&#xff0c;知识图谱。Citation: Yuan X, WangT, Gulcehre C, et al. Machine comprehension by text-to-text neural question generation[J]. arXiv preprint arXiv:17…