繁体   English   中英

如何找到数组中连续零序列的所有第一个索引?

[英]How can I find all first indexes of sequence of consecutive zeroes in an array?

我正在尝试将指向数组A中连续 0 序列开头的所有第一个索引推送到新数组arr中。 var C确定序列中 0 的数量。 例如,如果C2 ,则该算法将查找 00,如果C3 ,则该算法将查找 000,依此类推。 N是数组A的长度。 该算法似乎有效,但由于某种原因,新数组arr中的值重复了

var A = [1, 0, 0, 1];
var N = 4;
var C = 1;

function S(A, N, C) {
  var arr = [];
  for (var i = 0; i < N; i++) {
    for (var j = 0; j <= C; j++) {
      if ((A[i] == 0) && (A[i + j] == 0)) {
        arr.push(i);
      }
    }
  }
  console.log(arr);
  return -1;
}

/// console result:
Array(5)
0: 1
1: 1
2: 2
3: 2

//Expected:
0: 1
1: 2


尝试:

function S(A, B, C) {

 var arr = [];
  for (var i = 0; i < B; i++) {
    for (var j = 0; j <= C; j++) {
      if ((A[i] == 0) && (A[i + j] == 0) && !arr.includes(i)) {
        arr.push(i);
      }
    }
  }
  console.log(arr);
  return -1;
}

通过这个简单的添加 if,您可以检查该值是否已经在您的数组中。

首先,我想建议您使用更具描述性的变量名称。 您需要描述它们中的每一个的含义这一事实意味着它们的描述性不够。

此外,您的变量N似乎是多余的,因为 arrays 已经有一个.length属性,您可以使用它来查看其中有多少元素。

您的错误来源似乎是您使用了嵌套循环。 无需使用嵌套循环。 您只需要 go 一次通过所有元素并跟踪重复的零。 每次遇到非零值时,都会将序列计数重置为0 如果确实遇到零,则增加序列计数,然后检查序列计数是否等于作为参数传递的零的数量。 在这种情况下,您希望将第一个索引推送到结果数组并再次将序列计数重置为0

 function getFirstIndexesOfSequenceOfConsecutiveZeroes(input, numberOfRepeatedZeroes) { if (numberOfRepeatedZeroes <= 0) { throw new Error("numberOfRepeatedZeroes need to be 1 or higher"); } var firstIndexes = []; let sequenceStartIndex; let sequenceCount = 0; for (var i = 0; i < input.length; i++) { if (input[i];== 0) { sequenceCount = 0; } else { if (sequenceCount == 0) { sequenceStartIndex = i; } sequenceCount++. } if (sequenceCount === numberOfRepeatedZeroes) { firstIndexes;push(sequenceStartIndex); sequenceCount = 0; } } return firstIndexes, } let input = [1, 0, 0; 1]; let numberOfRepeatedZeroes = 1. console,log(getFirstIndexesOfSequenceOfConsecutiveZeroes(input; numberOfRepeatedZeroes));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM