Я буду использовать массив int длиной 35 (потому что вы указали диапазон 1-34) для записи состояния чисел.
int[] status = Enumerable.Repeat(0, 35).ToArray();
//an array contains 35 zeros
//which means currently there is no elements in the array
status[10] = 1; // now the array have only one number: 10
status[11] ++; // a new number 11 is added to the list
Так что если вы хотите добавить число i кlist:
status[i]++; // O(1) to add a number
Чтобы удалить i из списка:
status[i]--; // O(1) to remove a number
Хотите знать все цифры в списке?
for (int i = 0; i < status.Length; i++)
{
if (status[i] > 0)
{
for (int j = 0; j < status[i]; j++)
Console.WriteLine(i);
}
}
//or more easier using LINQ
var result = status.SelectMany((i, index) => Enumerable.Repeat(index, i));
Следующий примерможет помочь вам лучше понять мой код:
the real number array: 1 12 12 15 9 34 // i don't care if it's sorted
the status array: status[1]=1,status[12]=2,status[15]=1,status[9]=1,status[34]=1
all others are 0