【发布时间】:2019-10-18 00:01:22
【问题描述】:
我尝试编写一个函数,该函数将在多维数组(值从 3 到 7)中找到至少 3 次彼此相邻的重复值(垂直和水平)。如果它发现,将其更改为不同的值。比方说 1。
我试图通过循环来做到这一点,但这似乎不是解决这个问题的好方法,或者我把它搞砸了。因为对于某些数组它有效,而对于某些数组则无效。
这是我的代码:
function searching(array) {
for (i = 0; i < array.length; i++) {
let horizontal = array[i][0];
let howMany = 1;
for (j = 1; j < array[i].length; j++) {
if (horizontal === array[i][j]) {
howMany += 1;
horizontal = array[i][j];
if (howMany >= 3) {
for (d = j; d > j - howMany; d--) {
array[i][d] = 0;
}
}
} else {
horizontal = array[i][j];
howMany = 1;
}
}
}
for (v = 0; v < array.length; v++) {
let vertical = array[0][v];
let howMany = 1;
for (x = 1; x < array.length; x++) {
if (vertical === array[x][v]) {
howMany++;
vertical = array[x][v];
if (howMany >= 3) {
for (d = x; d > x - howMany; d--) {
array[d][v] = 0;
}
}
} else {
vertical = array[x][v];
howMany = 1;
}
}
}
}
这个想法是例如给数组:
let array = [
[3, 4, 5, 6, 7],
[3, 4, 5, 6, 7],
[3, 4, 5, 5, 5],
[3, 5, 6, 7, 4]
]
结果应该是:
let result = [
[1, 1, 1, 6, 7],
[1, 1, 1, 6, 7],
[1, 1, 1, 1, 1],
[1, 5, 6, 7, 4]
]
在此先感谢您提供解决问题的任何想法 :) 问候!
【问题讨论】:
-
6 出现了 3 次,为什么没有设置为 1?
-
因为它不是相邻的另一个值 6 至少相邻重复 3 次。
-
你说“对于某些 [arrays] 它不 [work]”。你能详细说明那些边缘情况吗?例如,边缘情况是否对相同值的垂直和水平序列相交的情况有问题?如果是这样,那么原因是您在将值用于计算其他序列之前覆盖了它们。您可以通过复制多维数组来解决这种极端情况,然后使用副本进行计算并使用原始数组覆盖值。
标签: javascript multidimensional-array