题解 | #最长区间#
思路:
最重要的是理解序列变换的本质是:把序列看作一个首尾相连的环,不管怎样变换,序列里元素的相对位置都没有变。那么我们的任务就很清晰了,就是在一个元素固定的环内找到元素全为1的最长连续序列。
处理:
一个比较简单的处理方法就是把序列看作环之后,再处理为一个以0开头(或者没有0)的序列,然后从头进行遍历计数即可。
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void (async function () {
// Write your code here
while ((line = await readline())) {
let tokens = line.split("");
let i = 0;
// 将1全部后置,直到0成为开头或者遍历了一圈
while (tokens[0]==='1' && i<tokens.length){
tokens.shift();
tokens.push('1');
i++;
}
// 对1进行计数,遇到0就停止记录count并与max数据比较
let count = 0, max = 0;
for (let char of tokens){
if (char == '1')
count++;
else{
if (max<=count)
max = count;
count = 0;
}
}
// 要考虑到最后一轮循环没有遇到0中断的情况
if (max<=count)
max = count;
console.log(max);
}
return ;
})();