如果它打破了确定的顺序,则进行计数器停止

Make a counter stop if it breaks a determined sequence

关于我的问题的简要总结:我正在尝试将一个序列变成一个“条件”序列——输入是一个仅由 true 和 false 组成的数组,我认为这会比如果它由数字序列组成。这个想法是让它计算一个“true”的序列,并在下一个输入为“false”并且returns更大的计数时中断。


// If the input is something like [true, true, ... true, true] 
// should return count => input.length

// My issue is to make it break when it have a interruption i. e. 
// [true, true, true, false, true, true, false] 
// should return => the bigger sequence; with my code it returns 5 

function sol(sequence) {
    let count = 0;
    
for (let i = 0; i < sequence.length; i++) {
    if (sequence[i] == true) {
        if (sequence[i] == sequence[i+1]){
            count++;
        }
    }
}

// I tried to add a break; but isn't worked like i wanted
// for (let i = 0; i < sequence.length; i++) {
//     if (sequence[i] == true) {
//         if (sequence[i] == sequence[i+1]){
//             count++;
//         } 
//         if (sequence[i] != sequence[i+1]) {
//             break;
// }
//     }
// }


// I need the counter has bigger (or equals) than 7 otherwise it return a "fail"
if (count >= 7) {
        console.log(count)
    } else {
        console.log('failed')
    } 
}


在 post 上进行一些解释后,这是一个功能结果:

  function sol(sequence) {
// Move the "+1" to low then when have no "true" will return 0.
  let count = 0;
  let largestSequence = 0;

  for (let i = 0; i < sequence.length; i++) {
    if (sequence[i] == true) {
      if (sequence[i] == sequence[i + 1]) {
        count++;
      }
    } else {
      if (largestSequence < count) {
        largestSequence = count + 1;
        count = 0;
      }
    }
  }
  return Math.max(largestSequence, count);
}


这是我所有奇怪示例的最终答案。谢谢Gulam

let sequenceContinued = false;
let count = 0;
let sequences = [];
for (let i = 0; i < array.length; i++) {
  const item = array[i];

  if (item === false && sequenceContinued === true) {
    sequenceContinued = false;
    sequences.push(count);
    count = 0;
    continue;
  }

  if (item === true) {
    sequenceContinued = true;
    count++;
  }

  if (i === array.length - 1 && item === true) {
    sequences.push(count);
  }
}

const longestCount = sequences.length ? Math.max(...sequences) : 0;

const array = [
  true,
  false,
  false,
  false,
  true,
  true,
  false,
  true,
  true,
  true,
  false,
  true,
  true,
  true,
  true
];

let sequenceContinued = false;
let count = 0;
let sequences = [];
for (let i = 0; i < array.length; i++) {
  const item = array[i];

  if (item === false && sequenceContinued === true) {
    sequenceContinued = false;
    sequences.push(count);
    count = 0;
    continue;
  }

  if (item === true) {
    sequenceContinued = true;
    count++;
  }

  if (i === array.length - 1 && item === true) {
    sequences.push(count);
  }
}

const longestCount = sequences.length ? Math.max(...sequences) : 0;

console.log(longestCount);

  function sol(sequence) {
  let count = 1;
  let largestSequence = 0;

  for (let i = 0; i < sequence.length; i++) {
    if (sequence[i] == true) {
      if (sequence[i] == sequence[i + 1]) {
        count++;
      }
    } else {
      if (largestSequence < count) {
        largestSequence = count;
        count = 1;
      }
    }
  }
  return Math.max(largestSequence, count);
}

var arr = [true, false, true, true, true, true, true];
var solution = sol(arr);
console.log(solution);

您可以创建一个单独的变量'largestSequence',每次遇到假值时,它都会将count的值存储在largestSequence中。

最后返回largestSequence和count这两个变量中的最大值,因为最大的true序列可能不会被false终止,比如[true, false, true, true, true, true,正确].