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≤配列の長さもよいです。

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/kth-largest-element-in-an-array

クラス解決{
 パブリックボイド quickSelect(ベクトル< INT >と、int型の L、int型の R、int型のランク){
         INT iはLを=、J = R、ミッド= [(L + R)/ 2 ]。
        実行{
             一方([I] <MID)++ I。
            一方 - ([J]> MID); J
            もし(I <= J){ 
                スワップ([I]、[J])。
                ++ 私は、
                - J; 
            } 
        } ながら(I <= J)
        もし(L <= J &&ランク<= J-L + 1 )quickSelect(L、J、ランク)。
        もし(I <= R &&ランク> = I-L + 1)quickSelect(I、R、rank-(I- L))。
    } 
    INT findKthLargest(ベクトル< INT >&NUMS、int型K){
         int型 N = nums.size()。
        nums.push_back(0 )。
        INT I = N; I> 0 ; i-- ){ 
            NUMS [I] = NUMS [I- 1 ]。
        } 
        K = N-K + 1 // 戻り値のK;
        quickSelect(NUMS、1 、n、k)は、
        戻りNUMS [K]。
    } 
}。

 

おすすめ

転載: www.cnblogs.com/wz-archer/p/12585222.html