【问题标题】:Identifying the index of array against the target value根据目标值识别数组的索引
【发布时间】:2023-01-06 23:19:04
【问题描述】:

我在办公室遇到的具有挑战性的问题之一,我无法解决。需要这里的帮助。

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);  

【问题讨论】:

  • 您想找到元素总和等于目标的数组子集吗?它必须恰好是两个元素吗?元素总是排序的吗?如果无法求和怎么办?可以多次选择一个元素吗?
  • @Wyck - 是的,你是对的。没有设置它可以返回为 0 或 false

标签: javascript arrays


【解决方案1】:

这种方法的问题是您最终可能会添加错误的元素;例如,如果目标是 13,您的代码将首先添加 2 和 7,然后不会返回正确的结果,因为它不会考虑添加 11,因为它超过了目标。相反,您应该使用两指针技术(参见https://www.geeksforgeeks.org/two-pointers-technique/

【讨论】:

    【解决方案2】:

    一个不是很有效的解决方案可能是这样的:

    • 遍历数组
    • 使用findIndex() 搜索总和为sum 的匹配项
    • 找到则返回结果,否则null

    const array = [2, 7, 11, 15];
    
    const findSum = (arr, sum) => {
        for (let i in arr) {
            const index = arr.findIndex(j => (arr[i] + j) === sum);
            if (index > 0) {
                return [ +i, index ];
            }
        }
        return null;
    };
    
    console.log(findSum(array, 9));     // [ 0, 1 ]
    console.log(findSum(array, 26));    // [ 2, 3 ]
    console.log(findSum(array, 999));   // null

    【讨论】:

      猜你喜欢
      • 2020-12-26
      • 1970-01-01
      • 2016-12-23
      • 2021-08-02
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多