标签:idx nums price ele 物品 算法 let 解决 贪心
今天做了一家公司的笔试题,里面一道编程题就是贪心算法来解决的,就是类似经典的背包问题。之前只是看过,笔试的时候凭借印象居然做出来80%,心情非常愉悦,记录一下。
原来的题目我不记得了,写个类似的题目。
背包问题是一个组合优化的问题,描述如下:给一个固定大小,能够携重W的背包以及一组有价值重量的物品,找出一个最佳的方案,使得装入包中的物品重量不超过W且总价值最大。
1、问题分析
数据:物品个数n=5,物品重量weights=[2,2,6,5,4],物品价值values=[6,3,5,4,6],背包总容量W=10。
2、问题思路
* 先计算出每一个物品的性价比,就是重量/价值,得到每个物品的性价比,存进去一个数组,按照从小到大排列。之后遍历这个数组,在容量>=0之前,增加max的值。
* 代码如下:
let price = [2,2,3,1,5,2]; // 价格 let nums = [2,3,1,5,4,3]; // 对应的数量 let money = 6; // 有多少钱 tanxin(price,nums,money) function tanxin(price,nums,money){ // 要返回的值 let max = 0; // 现在剩下多少钱 let endMoney = money; let arr = []; // 遍历价格,把价格,数量,和比例存进一个数组 price.forEach((ele,idx)=>{ arr.push({ 'price':price[idx], 'num':nums[idx], 'bili':price[idx]/nums[idx] }) }) // 做一下排序,从小到大排 arr.sort((a,b)=>{ return a.bili - b.bili }) // 遍历物品数组 arr.forEach((ele,idx)=>{ // 需要限定当大于0时,不然会一直加下去 if(endMoney - ele.price>=0){ // 剩下的钱减少 endMoney = endMoney - ele.price; // 可以买的物品最大数量增加 max += ele.num } }) console.log(max) }
标签:idx,nums,price,ele,物品,算法,let,解决,贪心 来源: https://www.cnblogs.com/linxf/p/12589624.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。