Sobes.tech
Back to questions
Junior — Middle
58

Какой способ хранения и структура данных лучше всего подходит для хранения большого набора чисел, не превышающих 30000 по модулю, чтобы обеспечить быстрый поиск и минимальное использование памяти?

Companies where asked
Surf

Answer from AI

sobes.tech AI

Для хранения большого набора чисел в диапазоне от -30000 до 30000 с целью быстрого поиска и минимального использования памяти лучше всего использовать структуры данных с компактным представлением и эффективным доступом.

Варианты:

  • Массив с индексированием: если числа целые и диапазон известен, можно использовать булев массив (битсет) длиной 60001 (от -30000 до 30000), где каждый бит указывает на наличие числа. Поиск будет O(1), память — около 7.5 КБ (60001 бит).

  • Отсортированный массив с бинарным поиском: хранить числа в отсортированном массиве и искать через бинарный поиск за O(log n). Память — минимальна, но поиск чуть медленнее.

  • HashSet или TreeSet: в Java можно использовать HashSet<Integer> для быстрого поиска (O(1) в среднем), но с накладными расходами на хранение объектов и хеш-таблицы.

Пример использования битсета в Java:

import java.util.BitSet;

public class NumberSet {
    private static final int OFFSET = 30000;
    private BitSet bitSet = new BitSet(60001);

    public void add(int number) {
        bitSet.set(number + OFFSET);
    }

    public boolean contains(int number) {
        return bitSet.get(number + OFFSET);
    }
}

Такой подход обеспечивает минимальное использование памяти и очень быстрый поиск.