【问题标题】:Problem in returning indices of two numbers in array返回数组中两个数字的索引的问题
【发布时间】:2022-01-09 14:31:27
【问题描述】:

我有这个问题:

给定一个整数数组nums 和一个整数target,返回两个数字加起来为target 的索引。

示例 1:

Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Output: Because nums[0] + nums[1] == 9, we return [0, 1].

通过下面的代码,可以使用setMap 获取添加到数组中的值

我需要帮助的是返回索引

const arr = [{key1: 2}, {key1: 7}, {key1: 11}, {key1: 15}];
const k = 9;
const valueSet = new Set(arr.flatMap((x) => Object.values(x)));
const valueArray = [...valueSet];

valueArray.forEach((v1, i1) => {
    for (let i2 = i1 + 1; i2 < valueArray.length; i2++) {
        if ((v1 + valueArray[i2]) === k) {
            // Return the indices
            return valueArray[i2];
        }
    }
});

【问题讨论】:

标签: javascript typescript ecmascript-6


【解决方案1】:

您必须解析并找到为您提供总和的索引组合。

下面的代码会帮助你

const arr = [{ key1: 2 }, { key1: 7 }, { key1: 11 }, { key1: 15 }];
const k = 9;
let valueSet = new Set(arr.flatMap((x) => Object.values(x)));
let valueArray = [...valueSet];

let indices;
let isFound = false;
// valueArray.forEach((v1, i1) => {
for (let i1 = 0; i1 < valueArray.length && !isFound; i1++) {
  for (let i2 = i1 + 1; i2 < valueArray.length && !isFound; i2++) {
    if ((valueArray[i1] + valueArray[i2]) === k) {
      //Return the Indices
      indices = [i1, i2];
      isFound = true;;
    }
  }
}
console.log(indices);

【讨论】:

    【解决方案2】:

    Nitheesh 提供的答案效果很好。至于为什么您的初始方法不成功的解释:

    使用forEach 遍历数组与使用传统的for 循环不同,回调函数会为数组中的每个元素调用。在forEach 循环中使用return 只会中断该特定元素的回调,而不是整个迭代(因此,forEach 循环中的return 的行为类似于@987654328 @ 在 for (...) 循环中。

    您可以阅读更多关于它的信息here

    【讨论】:

      【解决方案3】:

      首先,您需要使用键 [{key1: 2},{key1: 7},{key1: 11},{key1: 15}]; 从数组中获取包含值的数组。然后循环值数组并在条件(nums[i] + nums[j] == target) => (7 + 2 == 9) 为真时返回索引。

      const arr = [{key1: 2},{key1: 7},{key1: 11},{key1: 15}];
      const k = 9;
      nums = arr.map((o) => {
        return Object.values(o)[0]
      })
      
      const twoSum = (nums, target) => {
          for(let i = 0; i < nums.length; i++){
              for(let j = i+1; j < nums.length; j++){
                  if(nums[i] + nums[j] == target){
                      return [i, j]
                  }
              }
          }
      };
      
      console.log(twoSum(nums, k))

      【讨论】:

        【解决方案4】:

        也许应该这样做:

        function indice1(target, arr) {
          let result = [];
        
          for (let i = 0; i < arr.length; i++) {
            for (let j = 0; j < arr.length; j++) {
              if (arr[i] + arr[j] === target) {
                return (result = [arr[i], arr[j]]);
              }
            }
          }
        
          return result;
        }
        
        function indice2(target, arr) {
          let result = [];
        
          for (const i of arr) {
            for (const j of arr) {
              if (i + j === target) {
                return (result = [i, j]);
              }
            }
          }
        
          return result;
        }
        
        function indice3(target, arr) {
          return arr.reduce((acc, curr, i, arr) => {
            let result = [...acc, curr];
        
            for (const i of acc) {
              if (i + curr === target) {
                result = [i, curr];
                arr.splice(1);
                break;
              }
            }
        
            return result;
          }, []);
        }
        

        【讨论】:

          【解决方案5】:
          const arr = [{ key1: 2 }, { key1: 7 }, { key1: 11 }, { key1: 15 }];
          const k = 9;
          let valueSet = new Set(arr.flatMap((x) => Object.values(x)));
          let valueArray = [...valueSet];
          
          valueArray.forEach((v,ind) => {
              let ind2 = valueArray.findIndex(iv => iv === k - v)
              ind2 > -1 && console.log([ind,ind2])
          })
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-09
            • 2015-05-31
            • 1970-01-01
            • 1970-01-01
            • 2018-09-13
            • 1970-01-01
            • 2020-07-16
            • 2011-01-20
            相关资源
            最近更新 更多