leetcode 215. tableau K-ième élément le plus grand (tri rapide)

Trouvez le k-ième plus grand élément dans un tableau non trié. S'il vous plaît noter que vous devez trouver est le premier k éléments les plus grands dans le tableau est trié, plutôt que k éléments distincts.

Exemple 1:

Entrée: [3,2,1,5,6,4] , et k = 2
Sortie: 5
Exemple 2:

Entrée: [3,2,3,1,2,4,5,5,6] et k 4 =
sortie: 4
Description:

Vous pouvez supposer que k est toujours actif, et 1 ≤ k ≤ longueur du tableau.

Source: bouton du séjour (LeetCode)
lien: https: //leetcode-cn.com/problems/kth-largest-element-in-an-array

classe Solution {
 publique :
     vide QuickSelect (vector < int > & a, int l, int r, int rang) {
         int i = l, j = r, mid = un [(l + r) / 2 ];
        faire {
             alors que (a [i] <mi) ++ i;
            tandis que (a [j]> mi) - j;
            si (i <= j) {
                swap (a, a [j] [i]);
                ++ i;
                - j;
            }
        } Tandis que (i <= j);
        si (l <= j && rang <= j-l + 1 ) QuickSelect (a, l, j, rang);
        si (i <= r && rang> = i-l + 1 ) QuickSelect (a, i, r, rank- (i- l));
    }
    int findKthLargest (vector < int > & nums, int k) {
         int n = nums.size ();
        nums.push_back ( 0 );
        pour ( int i = n; i> 0 ; i-- ) {
            NUMS [i] = nums [i- 1 ];
        }
        k = n-k + 1 ;
        // retour k; 
        QuickSelect (nums, 1 , n, k);
        retour nums [k];
    }
};

 

Je suppose que tu aimes

Origine www.cnblogs.com/wz-archer/p/12585222.html
conseillé
Classement