【题目】给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数。

【代码1】:时间与额外空间复杂度O(N*aim)

import numpy as np

from xmlrpc.client import MAXINT

def mincoin(arr,aim):

if len(arr)<0:

print("No coin provided for change!")

arr.sort()

arr.reverse()

if aim == 0:

print("Aim is 0, no need to change!")

dp = np.zeros((len(arr),aim+1))

i = 0

j = 0

left = aim

maxval = MAXINT

for j in range(1,aim+1):

dp[0][j] = maxval

if j-arr[0] >=0 and dp[0][j-arr[0]] != maxval:

dp[0][j] = dp[0][j-arr[0]]+1

for i in range(1,len(arr)):

for j in range(1,aim+1):

left = maxval

if j-arr[i] >=0 and dp[i][j-arr[i]] != maxval:

left = dp[i][j-arr[i]]+1

dp[i][j] = min(left,dp[i-1][j])

print('Need ',int(dp[len(arr)-1][aim]),' Coins.')

# ===CALL === #

a = [3,5,2]

tar = 20

mincoin(a,tar)

【代码2】:时间复杂度O(N*aim),额外空间复杂度O(aim)

import numpy as np

from xmlrpc.client import MAXINT

def mincoin(arr,aim):

if len(arr)<0:

print("No coin provided for change!")

arr.sort()

arr.reverse()

if aim == 0:

print("Aim is 0, no need to change!")

dp = np.zeros((1,aim+1))[0]

i = 0

j = 0

maxval = MAXINT

for j in range(1,aim+1):

dp[j] = maxval

if j-arr[0] >=0 and dp[j-arr[0]] != maxval:

dp[j] = dp[j-arr[0]]+1

left = 0

for i in range(1,len(arr)-1):

for j in range(1,aim+1):

left = maxval

if j-arr[i] >=0 and dp[j-arr[i]] != maxval:

left = dp[j-arr[i]]+1

dp[j] = min(left,dp[j])

#print(dp)

print('Need ',int(dp[aim]),' Coins.')

# ===CALL === #

a = [5,2,3]

tar = 20

mincoin(a,tar)

【代码3】:时间复杂度O(N*aim),额外空间复杂度O(aim)

在原书也就是【代码2】的基础上,下面的执行效率会更高一点点,但是这种算法对于【代码1】的复杂度是有问题的。

import numpy as np

from xmlrpc.client import MAXINT

def mincoin(arr,aim):

if len(arr)<0:

print("No coin provided for change!")

arr.sort()

arr.reverse()

if aim == 0:

print("Aim is 0, no need to change!")

dp = np.zeros((1,aim+1))[0]

i = 0

j = 0

maxval = MAXINT

for j in range(1,aim+1):

dp[j] = maxval

if j-arr[0] >=0 and dp[j-arr[0]] != maxval:

dp[j] = dp[j-arr[0]]+1

left = 0

for i in range(1,len(arr)):

for j in range(j-arr[i],aim+1):

left = maxval

if dp[j-arr[i]] != maxval:

left = dp[j-arr[i]]+1

dp[j] = min(left,dp[j])

#print(dp)

print('Need ',int(dp[aim]),' Coins.')

# ===CALL === #

a = [5,2,3]

tar = 20

mincoin(a,tar)

python 货币合适_算法之Python实现 - 001 : 换钱的最少货币数相关推荐

  1. Python换钱的最少货币数

    题目: 给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim,代表要找的钱数,求组成aim的最少货币数. 例: arr = [ ...

  2. java 最少货币单元组合换钱_动态规划. 换钱的最少货币数和最多方法数

    通过对换钱类题目的学习,我们将了解到 暴力递归及优化方法 记忆搜索(优化一) 动态规划的基本实现方法(优化二) 动态规划的空间优化(优化三) 1. 换钱的最少货币数,货币可重复使用 给定数组arr,a ...

  3. 最少钱币数不java,【动态规划专题】3:换钱的最少货币数

    <程序员代码面试指南--IT名企算法与数据结构题目最优解> 左程云 著 换钱的最少货币数 [题目] 给定数组arr, arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的 ...

  4. 牛客题霸 [ 换钱的最少货币数] C++题解/答案

    牛客题霸 [ 换钱的最少货币数] C++题解/答案 题目描述 给定数组arr,arr中所有的值都为正整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个aim,代表要找的钱 ...

  5. python信息找人的算法_算法篇-python查找算法

    上一篇的递归算法中,了解到算法的复杂度.递归就是在函数中调用本身. 在汉诺塔游戏例子中,如果你需要移动的盘子很多时,程序运行就会消耗很长时间来计算结果.可以回顾下 ->算法篇-python递归算 ...

  6. csdn学院的python培训怎么样_这段 Python 代码让程序员赚 300W,公司已确认!网友:神操作...

    Python到底还能给人多少惊喜? 笔者最近看到了这两天关于Python最热门的话题,关于<地产大佬潘石屹学Python的原因>,结果被这个回答惊到了: 来源:知乎 https://www ...

  7. python递归函数例题_递归案例python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 而对应的中文翻译 "递归" 却表达了两个意思:"递 ...

  8. python列表拆包_详解python 拆包可迭代数据如tuple, list

    详解python 拆包可迭代数据如tuple, list 拆包是指将一个结构中的数据拆分为多个单独变量中. 以元组为例: >>> a = ('windows', 10, 25.1, ...

  9. python len函数_知识清单Python必备的69个函数,你掌握了吗?

    本文纲要 Python 作为一门高级编程语言,为我们提供了许多方便易用的内置函数,节省了不少开发应用的时间.目前,Python 3.7 共有 69 个内置函数,一些是我们耳熟能详的函数,另一些却不是很 ...

最新文章

  1. php要怎么使用imagettftext_延长防腐木使用要怎么做呢?
  2. linux文件操作(二)
  3. STM32系统学习——DMA(直接储存器访问)
  4. 小波的秘密5_多分辨率分析和连续小波变换2
  5. 二次规划的一个很好的课件网站
  6. springboot 使用idea打包 遇到问题
  7. sql SERVER 模拟试题
  8. php中时差怎么改,我的PHP时差功能可以改进吗?
  9. 【转】c# 操作webservice(经典入门教程+MSDN必胜)(有自己修改的部分)
  10. 阿里云安装Quantaxis
  11. Python之基础练习代码
  12. 如何使用 Java 调取 Python、R 的训练模型?
  13. SQL Server差异备份的备份/还原原理
  14. bzoj3551 [ONTAK2010]Peaks加强版(Kruskal重构树+主席树)
  15. TSAP(2) : 时区切换
  16. 算法学习笔记 全源最短路径Johnson算法(用于稀疏图和有负边的图)
  17. CAD如何绘制六连环图案?CAD使用圆,椭圆,直线综合练习
  18. 香港拼音-汉字对照表
  19. 用无线热点入门树莓派4详解
  20. c语言将大小写字母互换,C语言编程:大小写互换

热门文章

  1. mybatis源码分析执行流程
  2. java开放地址法和链地址法解决hash冲突
  3. Ionic 4.0.2 发布,移动应用开发框架
  4. Kafka基础系列第1讲:Kafka的诞生背景及应用
  5. window.onload中调用函数报错的问题
  6. java Redis Jedis存储Java对象 - (Java序列化为byte数组方式)
  7. 李廷伟:可穿戴技术引领物联网创新新浪潮
  8. Android ImageView设置图片原理
  9. 一个关于Cobar 的释疑
  10. Java中的weak reference 和 soft reference