@dmitriyivvvv

Yandex Contest как избавиться от ошибки Memory Limit/Time Limit?

Имеется следующая задача: yandex contest
Имееются 2-а решения:
//Решение 1:
const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
  input: fs.createReadStream('input.txt'),
  terminal: false
});

let prev;

rl.once('line', () => {
  rl.on('line', line => {
    if (line != prev) fs.appendFileSync('output.txt', `${prev ? '\n' : ''}${prev = line}`);
  });
});

//Решение 2:
const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({
  input: fs.createReadStream('input.txt'),
  terminal: false
});

let prev;

rl.once('line', () => {
  rl.on('line', line => {
    if (line != prev) process.stdout.write(`${prev ? '\n' : ''}${prev = line}`);
  });
});

Проблема 1-го решения - превышен лимит времени(1s), а второго лимит памяти(20 мб). Как можно оптимизировать этот код?
  • Вопрос задан
  • 2849 просмотров
Решения вопроса 1
longclaps
@longclaps
Псевдокод
открыл файл
a = прочитал одно число
пока файл не кончился
    b = прочитал одно число
    если a < b
        вывел a
        a = b
вывел a
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@krong
решение фактически сводится только к тому что бы удалить дубли из входного массива
using System;
using System.Linq;

namespace Test {
class Program {

static void Main() {
int n = Convert.ToInt32(Console.ReadLine());
int i = 0;
int[] mass = new int[n];
while (n > 0) {
mass[i] = Convert.ToInt32(Console.ReadLine());
n--; i++;
}
mass = mass.Distinct().ToArray();
GC.SuppressFinalize(n); GC.SuppressFinalize(i);
GC.Collect();
foreach (var item in mass) {
Console.WriteLine(item);
}
}
}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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