我有一个对象数组:[
{
score: 1,
},
{
score: 2,
},
{
score: 4,
},
]我有一个给定的值,一个数字。例如:值为6我的目标是获取对象,使它们的分数(自己添加)最接近值(这里:6)我的第一步是检查对象分数是否等于该值。如果不是这样,我不知道如何实现这一点。使用上面的数组,对于6 ,我需要选择第二个和第三个,因为它是添加分数等于6 (4 + 2)的唯一组合但是,假设第三个对象的分数是 3,我需要选择 3 个对象才能获得6。有时我无法获得价值,所以我只需要成为最接近的人。我不想让你创建一个算法,但我需要知道我应该遵循什么路径才能有效地实现这一点,因为我完全不知道如何实现这一点。
1 回答

慕标5832272
TA贡献1966条经验 获得超4个赞
使用递归。
基本上从检查第一个分数的函数调用开始。如果它大于或等于最终分数,则返回该值。如果它小于分数,则再次调用该函数,并将新分数作为参数传递。如果下一个分数加上前一个分数大于或等于该分数,则返回该值。如果不是,则继续进行,直到分数大于或等于该值。
现在,您还必须检查哪个最终得分最接近,不一定哪个更大(例如,您可以得到 10 作为较大的值,而较小的值是 5,这更接近,所以在这种情况下,您需要选择 5)。
所以要解决这个问题,你需要做同样的事情,再次,相反。从对第一个分数值的函数调用(不同的函数)开始。如果等于或小于最终分值,则返回。如果它大于最终分数,则继续,并再次调用相同的函数,将之前的分数作为参数。如果新分数加上刚刚检查的上一个分数小于或等于最终值,则返回它。如果它更大,则继续前进,直到到达终点。如果您已经到达终点并且所有添加的值仍然更大,那么只需返回最后一个值。
现在您总共有 2 个返回值,来自这两个不同的函数。现在您只需将每个值与最终得分(即绝对值)之间的距离进行比较。假设你的分数是6,一个结果是8,另一个是4。因此,取一个变量列表distHigher
并将其设置为8 - 6
,然后创建另一个变量 ,distLower
并将其设置为6 - 4
,然后确定哪个数字更小,这就是您的答案。
添加回答
举报
0/150
提交
取消