安全上の問題を証明し、これはまた、インタビューのトピックの高い発生率だったOffer40
2019.4アリゴールドのドレスと尋ねた:10億データに予めKの数を見つけます。
アイデア:
1.ソートアルゴリズムを指示した後、我々は良いための最初のK行を取ることができます。しかし、単一の高速放電時間複雑さもO(nlog(n))がある考えます。今回はデータ量の増加とともに明らかに、すべてのデータをソートする必要がありますが、また、サージの複雑さ。
2.複雑さはO(n)は時間を使用して、我々はこのような場合は、Kの多数を求める前にやったと考えることができ 導入されたパーティション機能。
3.考えに安全性を証明するために設けられたオファー:容器は未満である場合、サイズKのコンテナを作成するために、それらにk個のオリジナルデータは、残りのデータの各々は、容器内のKの最大値とを比較します最大で交換しました。試験中、この二分木の容器は、最大値が最大スタックによって得られるデータ。
アプリケーション・ヒープ・ソート・アルゴリズムの複雑さがあるだけで、この問題は、O(nlog k)は、ヒープが完全二分木であり、最大のヒープは、トップの数が最大である;二分木又はヒープに基づく方法が達成するために、アレイの前に全ての第kのデジタル最大ヒープを作成し、その後の要素の数未満であれば、ヒープの最上部に横断すると、K + 1のデジタルアレイを横断最後に残ったヒープは、歩行を続ける2つの数、再構成されたパイルを交換します最小数k、時間複雑度は、O(nlog K)。
# - * -コーディング:UTF-8 - * - クラスのソリューション: DEF GetLeastNumbers_Solution(自己、tinput、K): ここで#書き込みコード インポートheapq 場合tinput == NoneまたはLEN(tinput)<KまたはLEN(tinput)<0またはK <= 0: リターン[] heapq.nsmallest(K、tinput)を返します