【问题标题】:Find pairs of numbers in an array with multiplication 256 javascript用乘法 256 javascript 在数组中查找数字对
【发布时间】:2020-08-09 16:38:16
【问题描述】:

我想在数组[128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64] 中找到一对数字a b 其中a * b = 256 并返回它们的索引。但是我想消除重复项,例如,如果结果已经包含 0 1,则不应添加 0 4,因为它们都代表 128*2

预期输出是两对索引,一对用于128 * 2,一对用于64 * 4,例如0 1, 6 7

let arr = [128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64];
let a = [];
for (let i = 0; i < arr.length; i++) {
  for (let j = i + 1; j < arr.length; j++) {
    if (arr[i] * arr[j] === 256) {
      console.log(arr[i], arr[j]);
    }
  }
}

【问题讨论】:

  • 你试过什么代码?
  • 结果集中有多个相同的值怎么办?
  • 我试过 for (let i = 0; i
  • 请使用该代码编辑问题,以便所有人都可以格式化并轻松阅读它,而不是评论中的大块
  • 让 arr = [128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64];让一个 = []; for (let i = 0; i

标签: javascript arrays for-loop


【解决方案1】:

你可以使用双循环

第一个i0 变为length - 1
第二个从i + 1 到数组的末尾

这样你就可以得到所有可能的组合

然后要检查重复项,您可以使用 Array.prototype.some 来检查是否已经有一对,例如 128 22 128

编辑

我根据要求将循环对象的方式更改为 0 1, 1 2, 2 3 ... 0 2, 1 3, ...

const data = [128, 2, 4, 16, 2, 128, 64, 4, 7, 4, 64];
const result = [];

for (let i = 0; i < data.length - 1; i++) {
  for (let j = i + 1; j < data.length; j++) {
    if (data[j-i-1] * data[j] == 256) {
      if (!result.some(x =>
          (data[x[0]] == data[j-i-1] && data[x[1]] == data[j]) ||
          (data[x[1]] == data[j-i-1] && data[x[0]] == data[j]))) {
        result.push([j-i-1, j]);
      }
    }
  }
}

result.forEach(x => console.log(x[0], x[1]))

【讨论】:

  • 我试过像你一样,但无法消除成对的重复数字。
  • 您必须更具体地说明重复数字的含义,您的意思是如果已经有一对 128 2 例如不添加该对的任何其他索引?例如只添加0 1 而不是0 4
  • 对不起,我没有具体说明。结果 128 2 at 0 1, 64 4 at 6 7 not 2 6
  • 您需要这个确切的结果吗?输出是一对 128x2 和 64x4。要获得6 7 而不是2 6,您只需以不同的方式循环数组,但结果是相同的
  • 你能给我确切的结果吗,我完全不明白你的意思
猜你喜欢
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
  • 1970-01-01
  • 2013-12-31
相关资源
最近更新 更多