算法之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)
算法之Python实现 - 001 : 换钱的最少货币数的更多相关文章
- 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)实现 zouxy09@qq.com 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 ...
随机推荐
- Java泛型相关总结(上)
最近在看<Java核心技术>泛型相关的部分,总结下. 泛型程序设计是什么? 泛型编程(generic programming)是计算机编程中的一种风格,类型通过参数指定.意味着编写的代码可 ...
- day01知识点
1.计算机基础 2.Python的历史 3.编码语言分类 Python是一门动态解释性的强制类型定义语言 4.Python的解释器种类 5.变量 法律规则:字母,数字,下划线(数字不能 ...
- TZipFile FileNames中文乱码解决办法
TEncoding.Default.GetString(zip.FileInfo[0].FileName); 补充说明: Zip.Extract(Zip.FileName[0], 'd:\'); 解压 ...
- 更改系统盘符后DFS无法复制故障处理
DFS是微软的分布式文件系统,其中有命名空间和复制功能,我们有文件服务器,平时主要使用的是复制功能,保持文件服务器的数据实时同步,这一台我觉得还挺好用的,可以不借助备份软件就可以实现2台文件服务器的数 ...
- java http 请求的工具类
/*** Eclipse Class Decompiler plugin, copyright (c) 2016 Chen Chao (cnfree2000@hotmail.com) ***/pack ...
- Android使用okhttp 响应Post请求 使用线程
1.在libs中导入okhttp-2.7.5.jar和okio-1.11.0.jar. 2.post请求 public void getData(){ new Thread(new Runnable( ...
- ECMA6 New Features
花了一些时间把ECMA6的新特性进行了回顾,给自己建立了思维索引,大部分内容借鉴了阮一峰大神的博客. refers: http://es6.ruanyifeng.com/#docs/arraybuff ...
- LeetCode——295. Find Median from Data Stream
一.题目链接: https://leetcode.com/problems/find-median-from-data-stream 二.题目大意: 给定一段数据流,要求求出数据流中的中位数,其中数据 ...
- maven编译下载源码
下载源码 mvn dependency:sources 跳过TEST mvn -DskipTests
- HUE安装过程中的一些坑
1. gcc: error: krb5-config:: No such file or directory 执行安装krb5-devel yum provides krb5-config 得到提示: ...