PossibleSums
2024-06-07 06:22:59
1.假如你有数枚硬币,在已知这些硬币的面值和每种面值有几枚时,随机从这些硬币中取出几枚硬币可能的和有多少种?(谷歌笔试题)
- 记硬币的面值为
coins=[10,50,100]
,其相应面值的枚数为quantity=[1,2,1]
则:
50 = 50
10 + 50 = 60
50 + 100 = 150
10 + 50 + 100 = 160
50 + 50 = 100
10 + 50 + 50 = 110
50 + 50 + 100 = 200
10 + 50 + 50 + 100 = 210
10 = 10
100 = 100
10 + 100 = 110
- 从上面可以看出来总共有9中不同的和.
整理思路:从上面的求和过程可以看出,单个硬币的枚数依次加入到每一种和中,取不同的值,可以把最终的和的取值放在一个元素单一的数据结构类型中,如
C++
或者Python
中的set
数据类型。0 = 0
10 = 10
- iiiiiiiiiiiiiiiiiiii
0 + 50 = 50
10 + 50 = 60
- iiiiiiiiiiiiiiiiiiiiiiiiiii
0 + 50 = 50
10 + 50 = 60
50 + 50 = 100
60 + 50 = 110
- iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
0 + 100 = 100
10 + 100 = 110
50 + 100 = 150
60 + 100 = 160
50 + 100 = 150
60 + 100 = 160
100 + 100 = 200
110 + 100 = 210
为了减少重复运算的次数,从数量最多的硬币面值开始迭代,每一枚硬币都对已经取得的所有和求和并放至保存和的容器中。
验证代码(python)
def possibleSums(coins, quantity): p=max(quantity) maxIndex=quantity.index(p) b=set([coins[maxIndex]*x for x in xrange(p+1)]) for i in range(len(coins)):if i!=maxIndex:for j in xrange(quantity[i]):d=b.copy()for k in b:d.add(k+coins[i])b=d return len(b)-1
提交代码(C++)
int getMaxPos(std::vector<int>vec){ int maxPos=0; int a=vec[maxPos]; for(size_t i=1;i<vec.size();i++){if(a<vec[i]){maxPos=i;a=vec[maxPos];} } return maxPos; } int possibleSums(std::vector<int> coins, std::vector<int> quantity) {int maxPos=getMaxPos(quantity);int maxV=quantity[maxPos];std::set<int>sum;for(int i =0;i<maxV+1;i++){sum.insert(i*coins[maxPos]);}for(int i=0;i<coins.size();i++){if(i!=maxPos){for(int j=1;j<=quantity[i];j++){std::set<int>temSum=sum;for(std::set<int>::iterator it=sum.begin();it!=sum.end();it++){temSum.insert(*it+coins[i]);}sum=temSum;}}}return (sum.size()-1); }
- refer
[1] https://codefights.com/interview-practice/task/rMe9ypPJkXgk3MHhZ
[2] http://www.cplusplus.com/reference/set/set/operator=/
PossibleSums相关推荐
- python硬币多少组合方式_硬币组合的完全搜索算法
这个问题类似于硬币兑换问题,但有点不同.在 问题是这样说的:你有一套硬币,你知道硬币的价值和每种硬币的数量.你想知道你能从这些硬币的非空分组中得到多少不同的总数.在 例如coins = [1, 2, ...
最新文章
- 马斯克的星辰大海,还在继续。“月球电梯,我来啦”
- python面向对象编程的优点-Python 基础知识----面向对象编程
- MVCC在MySQL的InnoDB中的实现
- 在Windows Media Center中收听超过100,000个广播电台
- C# VS生成后事件命令行
- Kubernetes 稳定性保障手册(极简版)
- 创建寄宿在Windows服务中的WCF服务
- 5G 十项全能、搭载麒麟 820 芯片,1899 元起的荣耀 X10 来了!
- SDUT OJ 顺序表应用3:元素位置互换之移位算法
- 卧槽!我的IDEA中XML显示屎黄色,怎么去掉?
- layui登录源码_基于springboot+thymeleaf+mysql+layui实现的论坛系统
- matlab函数imhist执行错误可能因为图像不是灰度的
- 工作流引擎的流程业务表设计
- 符号---Alt+数字键
- 程序员女朋友礼物python代码_程序员到底该怎么给女朋友挑礼物
- 日程提醒app android,手机里有提醒日程安排的软件吗?
- [国家集训队]阿狸和桃子的游戏(贪心)
- Windows Shell编程-第十章.Winows辅助库
- 2022,2021英语六级全套资料自提,阿里云网盘链接,不限速度
- 笔耕不缀,学无止境|报名参加CCTC的八大理由