python整钱兑换零钱基础写法_算法之Python实现 - 001 : 换钱的最少货币数

【题目】给定数组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)

OptimalSolution(1)--递归和动态规划(2)矩阵的最小路径和与换钱的最少货币数问题

一.矩阵的最小路径和 1 3 5 9 1 4 9 18 1 4 9 18 8 1 3 4 9 9 5 8 12 5 0 6 1 14 14 5 11 12 8 8 4 0 22 22 13 15 12 ...

算法之Python实现 - 002 : 换钱的最少货币数补充(每种货币只能使用一次)

[题目]:给定数组arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币仅可以使用一张,再给定一个整数aim代表要找的钱数,求组成aim的最少货币数. [代码1]:时间与额 ...

[程序员代码面试指南]递归和动态规划-换钱的最少货币数(DP,完全背包)

题目描述 给定arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim,求组成aim的最少货币数. 解题思路 dp[i][j]表示只用第0 ...

[DP]换钱的最小货币数

题目一 给定数组arr,数组中有N个元素,其中所有的之都为整数且不重复.每个只代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求组成aim的最少货币数. 解法 依 ...

机器学习算法与Python实践之(四)支持向量机(SVM)实现

机器学习算法与Python实践之(四)支持向量机(SVM)实现 机器学习算法与Python实践之(四)支持向量机(SVM)实现 [email protected] http://blog.csdn.net/ ...

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) z ...

数据结构与算法(Python)

数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...

八大排序算法的 Python 实现

转载: 八大排序算法的 Python 实现 本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个 ...

数据关联分析 association analysis (Aprior算法,python代码)

1基本概念 购物篮事务(market basket transaction),如下表,表中每一行对应一个事务,包含唯一标识TID,和购买的商品集合.本文介绍一种成为关联分析(association a ...

随机推荐

Eclipse ndk fix插件开发

一. 手工修复ndk环境bug Eclipse做ndk开发的时候, 经常会遇到编译过去,却报语法错误的问题,比如 ①. 头文件不识别 ②. 头文件识别了, 类型不识别 针对这一的bug,我们一般按照如 ...

[转]C#网络编程(异步传输字符串) - Part.3

本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...

分享Kali Linux 2016.2第47周镜像

分享Kali Linux 2016.2第47周镜像Kali Linux官方于11月20日发布Kali Linux 2016.2的第47周镜像.这次发布仍然包含11个镜像文件.其中,不仅包含Gnome桌 ...

oracle 连接查询,和(+)符号的用法

--连接查询 左链接.右链接,全链接 --内链接select e.account 用户名, e.empname 名称, c.comname 公司名称  from employee e inner jo ...

iOS面试和招聘

1, 面试题参考答案(上) 2, 招聘一个靠谱的 iOS

C语言实现strlen

strlen: #ifndef STRLEN_H #define STRLEN_H #include // 参考微软的写法 int cat_strlen(const c ...

C# DateTime和DateTime?格式化时间

DateTime:   DateTime?:

自定义View的封装

通过上一个博文的自定义View的编写后,发现代码其实挺复杂的,所有这里通过对代码进一步的优化,即用到了java的一个重要的特点:封装.通过对父类的方法进行封装,然后在子类继承后实现相应的函数即可,达到 ...

samba及其基本应用

Samba 137/udp,138/udp,139/tcp,445/tcp windowns主机共享: linux主机进行访问查看资源:smbclient -L Server_IP -U 用户名 li ...

可远程定位、解锁并启动汽车的黑客设备OwnStar

GM告诉WIRED,OnStar用户不必担心之前存在的问题,现在已经修复了之前可被利用的漏洞,. 然而,Kamkar表示问题还是没有被解决,并且已经由GM汇报了该问题. 在任何已经连接的汽车上,GM的 ...

你可能感兴趣的:(python整钱兑换零钱基础写法_算法之Python实现 - 001 : 换钱的最少货币数)