You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计布尔数组中最长连续true序列,遇到false中断返回最大计数

布尔数组连续true最大长度统计实现

需求说明

处理仅由true和false组成的布尔数组,统计连续true序列的长度,遇到false时中断当前序列的计数,最终返回所有连续true序列的最大长度。额外要求为:若最大长度大于等于7则输出该数值,否则输出"failed"。

初始代码问题

最初编写的代码存在逻辑错误,例如输入[true, true, true, false, true, true, false]时会错误返回5,无法得到正确结果3,尝试添加break语句也未达到预期效果,初始代码如下:

// 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')
    } 
}

中间修复版本

经过调整后得到可正常运行的中间版本代码:

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;

内容的提问来源于stack exchange,提问作者Breno Lira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:21:02