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)