Вы можете использовать хеш-таблицу. Хэшируйте все элементы вашего массива (это O (n)). Вам понадобится внутренняя структура данных для хранения уникальных значений, содержащихся в каждом хэш-бине, и количества вхождений (своего рода ассоциативная память, похожая на C ++ std :: map). До тех пор, пока вы можете гарантировать, что в любом заданном бине будет не более константы m коллизий (для разнородных входных значений хеша), это O (m log m), но, поскольку m является константой, действительно O (1). Это предположение может быть неоправданным, но ключ к получению достаточно хорошего спреда для ваших входных значений.
Чтобы выйти из режима, изучите все элементы в хеш-таблице, которые будут значениями, которые встречаются в исходном входном массиве, и числом раз, которое они встречаются. Найдите значение с наибольшим числом вхождений (снова O (n)). Общая сложность равна O (n), если вы можете найти подходящую хеш-функцию. В худшем случае производительность будет O (n log n), если хеш-функция не обеспечивает хорошую производительность при столкновении.
С другой стороны, .Net предоставляет большую библиотеку времени выполнения, которая может упростить эту задачу. Если это возможно, вы можете рассмотреть возможность использования новой версии VB.