Programa Javascript para encontrar k elementos máximos de array en el orden original

Dada una array arr[] y un entero k, necesitamos imprimir k elementos máximos de la array dada. Los elementos deben imprimirse en el orden de la entrada.
Nota: k siempre es menor o igual que n.

Ejemplos:  

Input : arr[] = {10 50 30 60 15}
        k = 2
Output : 50 60
The top 2 elements are printed
as per their appearance in original
array.

Input : arr[] = {50 8 45 12 25 40 84}
            k = 3
Output : 50 45 84

Método 1: Buscamos el elemento máximo k veces en la array dada. Cada vez que encontramos un elemento máximo, lo imprimimos y lo reemplazamos con menos infinito (Number.MIN_SAFE_INTEGER en Javascript) en la array. Además, la posición de todos los k elementos máximos se marca mediante una array para que con la ayuda de esa array podamos imprimir los elementos en el orden dado en la array original. La complejidad temporal de este método es O(n*k).

Javascript

<script>
 
// JavaScript program to find k maximum elements
// of array in original order
  
// Function to print k Maximum elements
function printMax(arr, k, n)
{
    var brr = Array(n).fill(0);
    var crr = Array(n)
     
      
    // Coping the array arr
    // into crr so that it
    // can be used later
    for(var i=0;i<n;i++)
    {
        crr[i]=arr[i];
    }
    // Iterating for K-times
    for(var i=0;i<k;i++)
    {
        // Finding the maximum element
        // along with its index
        var maxi=Number.MIN_SAFE_INTEGER;
        var index;
        for(var j=0;j<n;j++)
        {
            if(maxi<arr[j])
            {
                maxi=arr[j];
                index=j;
            }
        }
        // Assigning 1 in order
        // to mark the position
        // of all k maximum numbers
        brr[index]=1;
        arr[index]=Number.MIN_SAFE_INTEGER;
    }
      
    for(var i=0;i<n;i++)
    {
        // Printing the k maximum
        // elements array
        if(brr[i]==1)
        document.write(crr[i]+" ");
    }
}
 
// Driver code
var arr = [ 50, 8, 45, 12, 25, 40, 84 ];
var n = arr.length;
var k = 3;
printMax(arr, k, n);
 
// This code is contributed by Pushpesh raj
 
</script>

Complejidad temporal: O(n*k)
Espacio auxiliar: O(n)

Método 2: en este método, almacenamos la array original en una nueva array y ordenaremos la nueva array en orden descendente. Después de ordenar, iteramos la array original de 0 a n e imprimimos todos los elementos que aparecen en los primeros k elementos de la nueva array. Para buscar, podemos hacer Búsqueda binaria .

Javascript

<script>
 
// JavaScript program to find k maximum elements
// of array in original order
 
// Function to print m Maximum elements
function printMax(arr, k, n)
{
    // vector to store the copy of the
    // original array
    var brr = arr.slice();
 
    // Sorting the vector in descending
    // order. Please refer below link for
    // details
    // https://www.geeksforgeeks.org/sort-c-stl/
    brr.sort((a, b) => b - a);
     
    // Traversing through original array and
    // printing all those elements that are
    // in first k of sorted vector.
    // Please refer https://goo.gl/44Rwgt
    // for details of binary_search()
    for (var i = 0; i < n; ++i)
        if (brr.indexOf(arr[i]) < k)
            document.write(arr[i] +" ");
}
 
// Driver code
var arr = [ 50, 8, 45, 12, 25, 40, 84 ];
var n = arr.length;
var k = 3;
printMax(arr, k, n);
 
// This code is contributed by ShubhamSingh10
 
</script>

Producción: 

50 45 84 

Complejidad de tiempo: O(n Log n) para ordenar. 
Espacio Auxiliar: O(n)
 

¡ Consulte el artículo completo sobre Encontrar k elementos máximos de array en el orden original para obtener más detalles!

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *