如何统计布尔数组中最长连续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
相关产品推荐
相关产品推荐

