40 вписана: Минимум (большое) число K

Offer40 доказать проблему безопасности, и это также высокая частота темы интервью

2019.4 муравьев золота платья и попросил: найти количество Дошкольников 1000 миллионов данных в.

Идеи:

1. Прямого алгоритма сортировки, а затем мы можем взять первые K строки порядка. Тем не менее, рассмотрим один быстро время разгрузочного сложность также вывода (Nlog (п)). На этот раз мы должны сортировать все данные, очевидно, с увеличением количества данных, но и от сложности волны.

2. используя время сложность O (п), мы можем рассмотреть этот случай сделал, прежде чем искать большое число K. Введена функция распределения.

3. Предложение при условии, чтобы доказать безопасность на идее: создать контейнер размера K, К исходным данным в них, каждый из оставшихся данных по сравнению с максимальным значением K в сосуде, если судно меньше максимальный обмен. Данные, что это бинарное дерево испытываемый контейнер, максимальное значение, полученное путем максимального стека.

Эта проблема применения кучного рода сложность алгоритма только O (Nlog к), куча является полным бинарное дерево, самая большая куча количество верхней является самым большим, метод , основанный на бинарном дереве или кучи , чтобы достичь, в первую очередь , прежде чем массив из K цифровой построить максимальную кучу, а затем от перемещения к + 1 цифровой массив, если меньше , чем число элементов , проходимых в верхней части кучи, так долго будет поменять два номера, реконструированный ворс, продолжить прогулку, последний остающийся кучи минимальное число к, время сложность O (Nlog к).

# - * - кодирование: UTF-8 - * - 
класс Решение: 
    Защиту GetLeastNumbers_Solution (я, TInput, к): 
        # писать код здесь 
        импорт heapq 
        если TInput == None или Len (TInput) <к или Len (TInput) <0 или к <= 0: 
            вернуться [] 
        
        вернуться heapq.nsmallest (к, TInput)

  

рекомендация

отwww.cnblogs.com/ivyharding/p/11216099.html