簡體   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