如数组:
var arr = [99.1, 92.2, 60, 50,
49.5, 45.7, 25.1, 20,
17.4, 13, 10, 7, 2.1, 2, 1];
找到和为100的数组元素,或者结果最接近100的组合:
[60,20,10,7,2,1]
如数组:
var arr = [99.1, 92.2, 60, 50,
49.5, 45.7, 25.1, 20,
17.4, 13, 10, 7, 2.1, 2, 1];
找到和为100的数组元素,或者结果最接近100的组合:
[60,20,10,7,2,1]
首先什么是最接近?
手机端回答编写代码不是很方便,就大概说一下思路,当然说的是和为100的思路。
1、用sort排序数组,从大到小排列,比如有十个数字。
2、for循环先拿到第一个数字和100比较,小于100的把数字拿出来,并记录下i值。接着用100减去这个数,得到一个值a,找到i后面的小于等于a的数字,小于接着减,等于则停止判断,或者减完最后一个数字不为0,停止。
DP + 贪心是没错的,但是不是标准的01背包,因为有小数。这里提供简化版思路但是不能处理小数,要处理成整数再做。
假设你给的数组arr是价值,重量都是1,背包容量不限制这里就设置为arr.length,物品个数也是arr.length,然后DP就好。
最后贪心求出拿了哪几个。
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答839 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决