Olushon
@Olushon

Почему код не проходит тест в Яндекс.Контест?

Решаю задачи из Яндекс.Контест, не могу понять в чем ошибка.

Требуется найти в бинарном векторе самую длинную последовательность единиц и вывести её длину.
Желательно получить решение, работающее за линейное время и при этом проходящее по входному массиву только один раз.

Формат ввода
Первая строка входного файла содержит одно число n, n ≤ 10000. Каждая из следующих n строк содержит ровно одно число — очередной элемент массива.

Формат вывода
Выходной файл должен содержать единственное число — длину самой длинной последовательности единиц во входном массиве.

Код проходит два теста, на третьем - ответ неверный. Помогите разобраться в чем проблема.

const readline = require('readline');
 
const rl = readline.createInterface({
    input: process.stdin
});
 
let values = [];
rl.on('line', (line) => {
    values.push(+line);
}).on('close', () => {
    const lengthes = [];
    let count = 0;

    for (let i = 0; i <= values.length; i++) {
        const value = values[i];
  
        if (value === 1) {
    	    count = count + 1;
        } else {
    	    if (count !== 0) {
      	        lengthes.push(count);
      	        count = 0;
    	    };
         };
    };

    let maxLength = lengthes.length != 0 ? Math.max(...lengthes) : 0;
    process.stdout.write(maxLength.toString());
});
  • Вопрос задан
  • 4744 просмотра
Пригласить эксперта
Ответы на вопрос 3
Очень похоже, что вы добавляете в массив число n тоже.
Ответ написан
@genbachae
Вот верный код на Kotlin:
fun main(args: Array<String>) {
    var s: String?
    var m: Int = 0          //  Для максимального значения
    var count: Int
    var old_m: Int = 0      //  Для предыдущего максимального значения
    s = readLine()!!
    count = s?.toInt()
    while (count > 0){
        s = readLine()!!
        if (s == "1"){
            m++
        }else{
            if(old_m < m){
                old_m = m
            }
            m = 0
        }
        count--
    }
    if(old_m < m){
        old_m = m
    }
    println(old_m)
}


Все тесты проходят без проблем!
Ответ написан
Комментировать
alexbuki
@alexbuki
программист js
У вас не разобран случай, когда число может состоять из единиц. Также судя по условиям цикл нужно начинать со второй строки. Первая строка - это количество элементов(строк) в массиве.

Мое решение:

const readline = require('readline')
const rl = readline.createInterface({
  input: process.stdin
})
const lines = []
let counter = 0
let maxcounter = 0
rl.on('line', (line) => {
  lines.push(line)
}).on('close', () => {
  for (let i = 1; i < lines.length; i++) {
    if (/^[1]+$/.test(lines[i])) {
      counter = lines[i].length + counter
    } else {
      if (maxcounter < counter) {
        maxcounter = counter
      }
      counter = 0
    }
  }
  if (maxcounter < counter) {
    maxcounter = counter
  }
  process.stdout.write(maxcounter.toString())
})
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы