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]; } };