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.
PHP
<?php // PHP 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) { echo " Invalid Input "; return; } // Find first largest element $first = $arr[0]; for ($i = 1; $i < $arr_size ; $i++) if ($arr[$i] > $first) $first = $arr[$i]; // Find second largest element $second = PHP_INT_MIN; for ($i = 0; $i < $arr_size ; $i++) if ($arr[$i] > $second && $arr[$i] < $first) $second = $arr[$i]; // Find third largest element $third = PHP_INT_MIN; for ($i = 0; $i < $arr_size ; $i++) if ($arr[$i] > $third && $arr[$i] < $second) $third = $arr[$i]; echo "The third Largest element is ", $third," "; } // Driver Code $arr = array(12, 13, 1, 10, 34, 16); $n = sizeof($arr); thirdLargest($arr, $n); // This code is contributed by m_kit ?>
- 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
PHP
<?php // PHP program to find third // Largest element in an array function thirdLargest($arr, $arr_size) { /* There should be atleast three elements */ if ($arr_size < 3) { echo " Invalid Input "; return; } // Initialize first, second and // third Largest element $first = $arr[0]; $second = PHP_INT_MIN; $third = PHP_INT_MIN; // Traverse array elements to // find the third Largest for ($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]; } echo "The third Largest element is ", $third; } // Driver Code $arr = array (12, 13, 1, 10, 34, 16); $n = sizeof($arr); thirdLargest($arr, $n); // This code is contributed by jit_t ?>
- 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