Dada una array de n enteros, encuentre el tercer elemento más grande. Todos los elementos de la array son enteros distintos.
Ejemplo :
Input: arr[] = {1, 14, 2, 16, 10, 20} Output: The third Largest element is 14 Explanation: Largest element is 20, second largest element is 16 and third largest element is 14 Input: arr[] = {19, -10, 20, 14, 2, 16, 10} Output: The third Largest element is 16 Explanation: Largest element is 20, second largest element is 19 and third largest element is 16
Enfoque ingenuo : la tarea es encontrar primero el elemento más grande, seguido del segundo elemento más grande y luego, excluyéndolos a ambos, encontrar el tercer elemento más grande. La idea básica es iterar la array dos veces y marcar el máximo y el segundo elemento máximo y luego, excluyéndolos a ambos, encontrar el tercer elemento máximo, es decir, el elemento máximo excluyendo el máximo y el segundo máximo.
- Algoritmo:
- Primero, itere a través de la array y encuentre el máximo.
- Almacene esto como primer máximo junto con su índice.
- Ahora recorra toda la array encontrando el segundo máximo, excluyendo el elemento máximo.
- Finalmente, recorra la array por tercera vez y encuentre el tercer elemento más grande, es decir, excluyendo el máximo y el segundo máximo.
Javascript
<script> // JavaScript program to find third // Largest element in an array // of distinct elements function thirdLargest(arr, arr_size) { /* There should be atleast three elements */ if (arr_size < 3) { document.write(" Invalid Input "); return; } // Find first // largest element let first = arr[0]; for (let i = 1; i < arr_size ; i++) if (arr[i] > first) first = arr[i]; // Find second // largest element let second = Number.MIN_VALUE; for (let i = 0; i < arr_size ; i++) if (arr[i] > second && arr[i] < first) second = arr[i]; // Find third // largest element let third = Number.MIN_VALUE; for (let i = 0; i < arr_size ; i++) if (arr[i] > third && arr[i] < second) third = arr[i]; document.write("The third Largest " + "element is ", third); } // Driver Code let arr = [12, 13, 1, 10, 34, 16]; let n = arr.length; thirdLargest(arr, n); </script>
- Producción:
The third Largest element is 13
- Análisis de Complejidad:
- Complejidad temporal: O(n).
Como la array se itera tres veces y se realiza en un tiempo constante - Complejidad espacial: O(1).
No se necesita espacio adicional ya que los índices se pueden almacenar en un espacio constante.
- Complejidad temporal: O(n).
Enfoque eficiente : el problema trata de encontrar el tercer elemento más grande en la array en un solo recorrido. El problema se puede resolver tomando la ayuda de un problema similar: encontrar el segundo elemento máximo . Entonces, la idea es recorrer la array de principio a fin y realizar un seguimiento de los tres elementos más grandes hasta ese índice (almacenados en variables) . Entonces, después de recorrer toda la array, las variables habrían almacenado los índices (o valores) de los tres elementos más grandes de la array.
- Algoritmo:
- Cree tres variables, primero , segundo , tercero , para almacenar índices de los tres elementos más grandes de la array. (Inicialmente todos ellos se inicializan a un valor mínimo).
- Muévase a lo largo de la array de entrada desde el principio hasta el final.
- Para cada índice, compruebe si el elemento es más grande que el primero o no. Actualice el valor de first , si el elemento es más grande, y asigne el valor de first a second y second a third . Entonces, el elemento más grande se actualiza y los elementos previamente almacenados como más grandes se convierten en el segundo más grande, y el segundo elemento más grande se convierte en el tercero más grande.
- De lo contrario, si el elemento es más grande que el segundo , actualice el valor del segundo y el segundo elemento más grande se convierte en el tercero más grande.
- Si las dos condiciones anteriores fallan, pero el elemento es más grande que el tercero , actualice el tercero .
- Imprima el valor de tercero después de atravesar la array de principio a fin
Javascript
<script> // JavaScript program to find third // Largest element in an array function thirdLargest(arr, arr_size) { /* There should be atleast three elements */ if (arr_size < 3) { document.write(" Invalid Input "); return; } // Initialize first, second and third Largest element var first = arr[0], second = -1000000000, third = -1000000000; // Traverse array elements to find the third Largest for (var i = 1; i < arr_size ; i ++) { /* If current element is greater than first, then update first, second and third */ if (arr[i] > first) { third = second; second = first; first = arr[i]; } /* If arr[i] is in between first and second */ else if (arr[i] > second) { third = second; second = arr[i]; } /* If arr[i] is in between second and third */ else if (arr[i] > third) third = arr[i]; } document.write("The third Largest element is "+ third); } /* Driver program to test above function */ var arr = [12, 13, 1, 10, 34, 16]; var n = arr.length; thirdLargest(arr, n); </script>
- Producción:
The third Largest element is 13
- Análisis de Complejidad:
- Complejidad temporal: O(n).
Como la array se itera una vez y se realiza en un tiempo constante - Complejidad espacial: O(1).
No se necesita espacio adicional ya que los índices se pueden almacenar en un espacio constante.
- Complejidad temporal: O(n).
¡ Consulte el artículo completo sobre el tercer elemento más grande en una variedad de elementos distintos 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