【问题标题】:Problem in Multi dimensional array in javascriptjavascript中多维数组的问题
【发布时间】:2019-01-05 15:37:07
【问题描述】:

我有一个多维数组,它的值只有 0 和 1。我想找出值 1 在线性对中出现的次数。

示例: 下面是一个矩阵(把它想象成 javascript 中的一个多维数组):

1 0 1 0 0
1 0 0 0 0
1 0 1 1 1
0 0 1 0 0

我想要的输出是总数。水平和垂直(不相邻)的线性对 1 的出现次数:

在这种情况下,输出为:3(前 3 行的第一列中的一个。第二个是最后两行的第三列。最后一个是第三行的最后三列)。

任何解决方案或想法都会奏效。如果不习惯 javascript,请随意使用任何编程语言。

【问题讨论】:

  • 这听起来很像家庭作业问题。你自己试过什么?
  • 嘿伙计,这实际上是一个作业,我可以访问给定矩阵的所有值,但不知道如何将其值与其相邻元素进行比较!

标签: javascript arrays multidimensional-array


【解决方案1】:

只需检查具有falsy 值的前任与具有truthy 值的前任并在两个方向上计数。

它通过寻找像0 1 1 这样的模式来工作,其中最后一项是实际位置,用[] 表示,这必须是真实的。用() 表示的前任也必须是真实的。最后一项,用{} 表示,是必要的分隔符,必须是假的,才能计算起始模式。

上面的模式基本上是双向查找和计数。

垂直

 {u} 
+---------------+
|(1) 0  1  0  0 |
|               |
|[1] 0 {0} 0  0 |
|               |
| 1  0 (1) 1  1 |
|               |
| 0  0 [1] 0  0 |
+---------------+

横向

+---------------+
| 1  0  1  0  0 |
|               |
| 1  0  0  0  0 |
|               |
| 1 {0}(1)[1] 1 |
|               |
| 0  0  1  0  0 |
+---------------+

u 表示undefind,不是矩阵的一部分

var matrix = [[1, 0, 1, 0, 0], [1, 0, 0, 0, 0], [1, 0, 1, 1, 1], [0, 0, 1, 0, 0]],
    count = 0;

matrix.forEach((row, i, m) =>
    row.forEach((v, j, r) => {
        if (!v) return;
        if (m[i - 1] && m[i - 1][j] && (!m[i - 2] || !m[i - 2][j])) ++count;
        if (r[j - 1] && !r[j - 2]) ++count;
    })
);

console.log(count);

【讨论】:

  • 你能再解释一下吗!
  • @siddhantkumar,当然,请看上面。
猜你喜欢
  • 2018-08-06
  • 2022-01-20
  • 2010-11-18
  • 2023-03-23
  • 1970-01-01
  • 2023-03-09
  • 2022-06-10
  • 2014-01-12
  • 1970-01-01
相关资源
最近更新 更多