其中一个挑战性的问题,我在办公室,我不能出来。需要帮助这里。
const array = [2, 7, 11, 15], target = 9;
在上面我有一个数组和目标为9,以及这个目标可以改变任何值为18,26像这样.结果应该显示indexOf数组用于获得目标.例如,目前它是9,所以结果应该是[0,1](2 + 7).如果目标是26,那么结果应该是[2,3].如何实现这一点?
对我来说,第一次尝试是成功的。但是其他的都不行。需要帮助。
我的代码:
const array = [2, 7, 11, 15], target = 9;
const result = [];
const outPut = array.reduce((c,v,i,a) => {
if(c !== target && c < target) {
result.push(a.indexOf(v));
}
return c + v;
}, 0);
console(result);
3条答案
按热度按时间rdrgkggo1#
下面是暴力破解的解决方案:
此示例生成
[1, 2, 7, 8, 9, -2]
的所有子集,其总和为9
。输出:
您只需要做两个小的更改,就可以使用索引而不是实际值:
array.map((_, i) => i)
的所有子集而不是array
以获取索引array[element]
而不是element
求和。vatpfxk52#
这种方法的问题是,您可能最终添加了错误的元素;例如,如果目标是13,你的代码会先把2和7相加,然后不会返回正确的结果,因为它不会考虑加上11,因为它超过了目标。相反,你应该使用一个两指针技术(参见https://www.geeksforgeeks.org/two-pointers-technique/)
u0sqgete3#
下面是我的解决方案:
这对我很有效。任何人发现这个问题,请评论。改变目标并播放。