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