Операция MEX, не укладываюсь в 3 секунды - C#
Операция MEX для набора целых неотрицательных чисел возвращает наименьшее неотрицательное целое число, не содержащееся в наборе. Например, для набора (0, 1, 2, 2, 4, 4, 11) это значение равно 3, для набора (1, 1, 2, 5, 7) это значение равно 0, а для набора (0, 1, 2, 2, 2, 3) это значение равно 4. В наборе могут встречаться одинаковые числа. Вам задана последовательность из нескольких операций одного из двух видов:
Входные данные В первой строке содержится число n — количество операций (1 ≤ n ≤ 150000). В следующих n строках содержатся операции, по одной в строке. Операция может быть одного из двух видов:
Примеры:
входные данные
7
+ 2
+ 1
+ 0
+ 4
+ 2
- 2
- 2
выходные данные
0 0 3 3 3 3 2
входные данные
6
+ 0
+ 1
+ 0
- 1
- 0
- 0
выходные данные
1 2 2 1 1 0
Мое решение:
List<int> mex = new List<int>();
Dictionary<int, int> bag = new Dictionary<int, int>();
for (int i = Int32.Parse(Console.ReadLine()); i > 0; --i)
{
string[] s = Console.ReadLine().Split();
int x = Int32.Parse(s[1]);
int n;
if (!bag.TryGetValue(x, out n)) n = 0;
n += s[0] == "+" ? 1 : -1;
if (n > 0)
{
bag[x] = n;
}
else if (n == 0)
{
bag.Remove(x);
}
x = 0;
while (bag.ContainsKey(x)) ++x;
mex.Add(x);
}
Console.WriteLine(String.Join(" ", mex));
Я переписал программу, но все равно чуть-чуть не укладываюсь
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp183
{
class Program
{
static void Main(string[] args)
{
List<int> introw = new List<int>();
List<int> intresult = new List<int>();
int min = 0;
int x = 0;
int n = int.Parse(Console.ReadLine());
for (int i = 0; i < n; i++)
{
string current = Console.ReadLine();
if (current.Substring(0, 1) == "+")
{
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) && (introw.Contains(x) == false))
{
min = x;
}
}
intresult.Add(min);
}
for (int i = 0; i < intresult.Count; i++)
{
Console.Write(intresult[i]);
if (i != n - 1)
{
Console.Write(" ");
}
}
Console.ReadLine();
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Ищу способ сменить выходную ноду тора программно из c#Ну и было бы здорово узнать как указать определенные страны выходной ноды программно,...