Date: 16.10.2017 17:34:02
По моим тестам, при входном наборе из 150000 случайных чисел от 0 до 100, время выполнения:
Цикл: 32 ms Метод String.Join: 16 ms Вывод результата (при выводе в консоль): 14000 ms Вывод результата (при перенаправлении стандартного вывода в файл): 6 ms
В общем, нужно чуть больше информации, в каком именно окружении запускается программа, чтобы ответить на этот вопрос.
Edit: единственное, что я изменил это current.Substring(0, 1) == "+" заменил на
current[0] == '+' , выиграло всего ~3 ms
Вот код с измерениями:
static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); long t1, t2; t1 = sw.ElapsedMilliseconds; List<int> introw = new List<int>(); List<int> intresult = new List<int>(); int min = 0; int x = 0; int n = int.Parse(Console.ReadLine()); t2 = sw.ElapsedMilliseconds ; Console.WriteLine("Init: " + (t2 - t1).ToString() + "ms"); t1 = sw.ElapsedMilliseconds; for (int i = 0; i < n; i++) { string current = Console.ReadLine(); if (current[0] == '+') { x = int.Parse(current.Substring(1, current.Length - 1)); introw.Add(x); if (x == min) { while (introw.Contains(min)) { min++; } } } else { x = int.Parse(current.Substring(1, current.Length - 1)); introw.Remove(x); if (x < min) { if (introw.Contains(x) == false) { min = x; } } } intresult.Add(min); } t2 = sw.ElapsedMilliseconds; Console.WriteLine("Loop: " + (t2 - t1).ToString() + "ms"); t1 = sw.ElapsedMilliseconds; string str = String.Join(" ", intresult); t2 = sw.ElapsedMilliseconds; Console.WriteLine("Join: " + (t2 - t1).ToString() + "ms"); t1 = sw.ElapsedMilliseconds; Console.WriteLine(str); t2 = sw.ElapsedMilliseconds; Console.WriteLine("Out: " + (t2 - t1).ToString() + "ms"); Console.ReadLine();
Автор: VadimTagil