Sobes.tech
Junior — Middle
95

Koks yra geriausias būdas saugoti ir duomenų struktūra dideliam skaičių rinkiniui, kurie neviršija 30000 absoliučioje reikšmėje, siekiant užtikrinti greitą paiešką ir minimalų atminties naudojimą?

Įmonės kur klausė
Surf

Atsakymas iš 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);
    }
}

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