40が内接する:Kの最小値(大)番号

安全上の問題を証明し、これはまた、インタビューのトピックの高い発生率だった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)を返します

  

おすすめ

転載: www.cnblogs.com/ivyharding/p/11216099.html