Leetcodeトピック215アレイK番目の最大要素(媒体)

件名の説明:

未ソート配列のk番目の最大の要素を検索します。あなたが見つける必要があることに注意してくださいすることは、アレイ内の最大の要素がソートされる最初のkはなく、k個の異なる要素です。

実施例1:

入力:[3,2,1,5,6,4]及びk = 2 
出力:5 
例2:

入力:[3,2,3,1,2,4,5,5,6]とK = 4 
出力:4 
注:

あなたは、常に有効なKを想定し、1つの≤K≤配列の長さができます。

アイデアの分析:

アイデア:トラバーサルは、それがある場合、それは、それが下降されている場合、それはNUMS返され、[NK] NUMS戻される昇順にソート+ [K-1]

クラスソリューション{ 
   パブリックstatic int型findKthLargest(INT [] NUMS、INT K){ 

        は、Arrays.sort(NUMS)。
        戻りNUMS [nums.length - K]。
    } 
}

時間の複雑さ:O(Nlogn)

宇宙複雑:O(1)

二つのアイデア:プライオリティキュー、最大または最小ヒープ・スタック

LEN素子のアレイが存在すると仮定すると。

最小のスタックは:lenの要素)は(LENポップ、最小ヒープに置かれており、 -最小限の要素はスタックこの時のk個の要素、kは、配列要素はk番目の最大要素でスタックのトップであります。
コードの実装:

クラスソリューション{ 
  //使用最小堆
    パブリックstatic int型findKthLargest(INT [] NUMS、INT K){ 

        int型のlen = nums.length。

        優先度つきキュー<整数>のminheap =新しい優先度つきキュー<>(LEN、Comparator.comparingInt(O - > O))。
        以下のために(INT I 0 =; I <LEN; I ++){ 
            minHeap.add(NUMS [I])。
        } 
        のための(INT J = 0; J <lenの- K、J ++){ 
            minHeap.poll()。
        } 
        )(minHeap.peekを返します。
    } 
}

最大ヒープ:LEN要素が最大スタックに配置され、次いで、ポップ()K - 1つの要素、第kのため - 1つの大要素がポップアップされ、その後、最大スタックアレイ要素は、スタックの最上位でありますk番目の最大の要素。

コードの実装:

クラスソリューション{ 
   //使用最大堆
    パブリックstatic int型findKthLargest(INT [] NUMS、INT K){ 

        int型のlen = nums.length。

        優先度つきキュー<整数>のminheap =新しい優先度つきキュー<>(LEN、(O1、O2) - > O 2 - O1)。
        以下のために(INT I 0 =; I <LEN; I ++){ 
            minHeap.add(NUMS [I])。
        } 
        のための(INT J = 0; J <K - 1、J ++){ 
            minHeap.poll()。
        } 
        )(minHeap.peekを返します。
    } 
}

時間の複雑さ:O(n)は、

宇宙複雑:O(n)は、

おすすめ

転載: www.cnblogs.com/ysw-go/p/11897857.html