提问人:Jeffrey Ti 提问时间:3/4/2023 更新时间:3/4/2023 访问量:91
零数组问题 -- 弄清楚解决方案的工作原理
Zero Array Questions -- Figuring Out How a Solution Works
问:
https://www.codewars.com/kata/59e270da7997cba3d3000041/javascript
描述: 如果一个数组包含多个零,并且每个零序列的长度至少为 4 个项目,则该数组称为零丰度。
您的任务是,如果给定的数组为零,则返回零个序列的数量,即 0。
例子 [0, 0, 0, 0, 0, 1] --> 1
1 组 5 个零 (>= 4),因此结果是 1
[0, 0, 0, 0, 1, 0, 0, 0, 0] --> 2
2 组 4 个零 (>= 4),因此结果是 2
[0, 0, 0, 0, 1, 0] --> 0 1 组 4 个零和 1 组 1 个零 (< 4) 每个零序列必须至少为 4 个长度,因此结果为 0
[0, 0, 0, 1, 0, 0] --> 0 1 组 3 个零 (< 4) 和 1 组 2 个零 (< 4)
[1, 2, 3, 4, 5] --> 0 没有零
[] --> 0 没有零
function zeroPlentiful(arr) {
let counter = [];
let index = 0;
arr.forEach((num, idx) => {
if (num === 0) {
counter[index] = counter[index] ? counter[index] + 1 : 1;
} else {
index = counter.length;
}
});
return counter.every(item => item >= 4) ? counter.length : 0;
}
有人可以给我一个关于这段代码中发生的事情的逐个播放吗?我已经尝试过这个问题很多次并查看了所有解决方案,但我仍然无法弄清楚发生了什么。我知道 forEach 正在寻找 0 和非 0 数字,但除此之外,我不确定发生了什么。
答:
代码实际上很简单,两个主要变量是 和 ,计数器跟踪数组中的零个数。然后,它遍历数组,并验证当前位置是否为零,如果是,则递增 的 in 位置。counter
index
counter
index
因此,对于第一个数组,将是 ,因为序列中有 5 个零,并且 index 没有从其原始值递增。[0,0,0,0,0,1]
counter[index]
5
如果该值不是 0,那么它不会在 上增加任何东西,而是递增,因为 0 的序列被打破了,现在计数器从一个新的位置开始。counter
index
基本上,它创建一个数组,其中包含每个序列中的零个数,然后该语句只需运行 every 函数,并验证该序列是否为 4 或更多。return
评论