Как я могу быстро определить, содержит ли список список?

Есть несколько связанных вопросов, но я ищу решение, специфичное для мое дело. Существует массив (обычно) из 14 целых чисел, каждое в диапазоне от 1 до 34. Как я могу быстро определить, появляется ли каждое целое число в конкретном статическом списке хотя бы один раз в этом массиве?

Для справки: I ' m в настоящее время использует этот код, который был написан для максимального сходства со спецификацией, поэтому его, безусловно, можно значительно улучшить:

if (array.Count < 13) {
    return;
}

var required = new int[] {
    0*9 + 1,
    0*9 + 9,
    1*9 + 1,
    1*9 + 9,
    2*9 + 1,
    2*9 + 9,                
    3*9 + 1,
    3*9 + 2,
    3*9 + 3,
    3*9 + 4,
    3*9 + 5,
    3*9 + 6,
    3*9 + 7,
};

IsThirteenOrphans = !required.Except (array).Any ();

Требуемый список не является динамическим, т.е. он всегда будет одинаковым во время выполнения. Использование Linq необязательно, главным аспектом является производительность.

Изменить:

  • Входной массив не отсортирован.
  • Входные значения могут появляться несколько раз.
  • Входной массив будет содержать как минимум 14 элементов, то есть на 1 больше, чем требуемый массив.
  • Есть только 1 требуемый массив и он статичен.
  • Требуемые значения различны.
  • Вы можете предположить, что создание гистограммы дешево.

Обновление: Меня также интересует решение для отсортированного входного массива.

5
задан mafu 16 November 2010 в 11:06
поделиться