Javascript 数组中的差/和,以检查生成另一个数组的两个数字

Javascript 数组中的差/和,以检查生成另一个数组的两个数字,javascript,arrays,Javascript,Arrays,为了清楚起见,这就是我的意思。我想在一个数组(排序)中查找两个最小的数字,它们将生成一个特定的数字。步骤如下: 循环遍历数组,每次设置一个当前值,另一个 数字将从中扣除。 继续这样做,直到找到与问题匹配的数字并返回 注意:同一个数组可能包含6和8或8和10,它们都将产生2,但应该返回6和8。数组的生成方式并不重要。 注:我昨天终于解决了这个问题,但我不介意关于如何解决这个问题的其他想法。我不确定我是否理解正确,但也许这就是你需要的: let result = arrayA[1] - ar

为了清楚起见,这就是我的意思。我想在一个数组(排序)中查找两个最小的数字,它们将生成一个特定的数字。步骤如下:

  • 循环遍历数组,每次设置一个当前值,另一个
    数字将从中扣除。
    • 继续这样做,直到找到与问题匹配的数字并返回
注意:同一个数组可能包含6和8或8和10,它们都将产生2,但应该返回6和8。数组的生成方式并不重要。


注:我昨天终于解决了这个问题,但我不介意关于如何解决这个问题的其他想法。

我不确定我是否理解正确,但也许这就是你需要的:

let result = arrayA[1] - arrayA[0];

let i, j;
for (i = arrayB.length - 1; i >= 1; i--) { // Set the first value
    for (j = arrayB.length - 1; j >= 1; j--) { // Set the second value
        if (i !== j) {
            if (
                arrayB[i] - arrayB[j] === result // Check substraction
                || arrayB[i] + arrayB[j] === result // Check addition
            ) return [arrayB[i], arrayB[j]];
        }
    }
}

此解决方案利用哈希表,并使用单循环方法从数组中获取两个值以平衡两个值

首先,取
arrayA
的两个值的绝对增量,并以此从较大的数组中获取值

然后通过检查所需值是否存在,以及总和是否小于先前找到的集合,来减少较大的数组
arrayB

用于检查的参数由
delta
v
的绝对增量、数组的实际值或通过取
delta
v
的和来构建

最后一点,为了使这一切都有效,实际值
v
包含在哈希表中,供以后查找

结果要么是两个值的数组,用于平衡其他两个值;要么是
未定义的
,如果找不到值

var arrayA=[3,5], arrayB=[2,9,5,4], delta=Math.abs(arrayA[0]-arrayA[1]), 值={}, 结果=阵列减少((r,v)=>{ 功能检查(w){ 如果(!values[w]| r&&r[0]+r[1]控制台日志(结果)
让arrayA=[3,5]
始终有两个元素?@brk是的,我很难理解需求。也许您可以再添加几个示例输入/输出。另外,为了简化这个问题,你似乎可以完全消除第一部分——找到数组中的两个最小数,它们的和或差等于给定的数。获取此
结果
值,并通过arrayB的两个元素中的每个元素的差异运行一个循环,并将其与
结果
进行比较。如果循环有任何问题,你可以提供代码。@NinaScholz我会这样做,并解释这个问题,againI一直知道reduce可以做到这一点,但不知道如何做到。我解决这个问题的方法是在第一个循环中设置一个当前值(从索引1开始)从索引0中减去,如果没有找到,则将当前值增加1,然后执行索引2-索引1和索引-0,继续这样做,直到找到匹配项。
let result = arrayA[1] - arrayA[0];

let i, j;
for (i = arrayB.length - 1; i >= 1; i--) { // Set the first value
    for (j = arrayB.length - 1; j >= 1; j--) { // Set the second value
        if (i !== j) {
            if (
                arrayB[i] - arrayB[j] === result // Check substraction
                || arrayB[i] + arrayB[j] === result // Check addition
            ) return [arrayB[i], arrayB[j]];
        }
    }
}