Demostrar offer40 seguridad. Top K

Encontrar el mínimo número k de la matriz.

  1. Ordena, $ n log (n) $
  2. Mantener el tamaño de la más grande montón de k, $ n log (k) $
  3. drenaje rápido pensado que el tiempo deseable complejidad $ O (n) $, el peor caso el tiempo la complejidad $ O (n ^ 2) $, partición aleatoria mejora el peor de los casos 

clase Solution {
 público :
     int partición (vector < int > & nums, int l, int r) {
         int pivote = nums [r];
        int i = l - 1 ;
        para ( int j = l; j <r; ++ j) {
             si (nums [j] < pivote) { 
                i ++ ; 
                de intercambio (nums [i], nums [j]); 
            } 
        } 
        De swap (nums [i + 1 ], nums [r]);
        volver i +1 ; 
    } 
    
    Int randomized_partition (vector < int > & nums, int l, int r) {
         int i = rand ()% (r - l + 1 ) + l; 
        de intercambio (nums [i], nums [r]); 
        retorno de partición (nums, L, R); 
    } 
    
    Void randomized_selected (vector < int > & nums, int l, int r, int k) {
         si (l> = r) de retorno ;
        int pos = randomized_partition (nums, L, R);
        int num = pos - l +1 ;
        si (k == num) de retorno ;
        más  si (k <num) randomized_selected (nums, l, pos - 1 , k);
        más randomized_selected (nums, pos + 1 , r, k - num); 
    } 
    
    
    Vector < int > getLeastNumbers (vector < int > & arr, int k) { 
        srand ((sin signo) tiempo (NULL)); 
        randomized_selected (arr, 0 , ( int ) arr.size () - 1 , k); 
        vector < int > res (arr.begin (), arr.begin () +k);
        volver res; 
    } 
};

Supongo que te gusta

Origin www.cnblogs.com/betaa/p/12655238.html
Recomendado
Clasificación