Dada una array arr[] que consiste en una permutación de los primeros N números naturales , la tarea es encontrar cualquier triplete (i, j, k) de la array dada tal que 0 ≤ i < j < k ≤ (N – 1) y arr[i] < arr[j] y arr[j] > arr[k] . Si no existe tal triplete, imprima «-1» .
Ejemplos:
Entrada: arr[] = {4, 3, 5, 2, 1, 6}
Salida: 1 2 3
Explicación: Para el triplete (1, 2, 3), arr[2] > arr[1](es decir, 5 > 3) y arr[2] > arr[3](es decir, 5 > 2).Entrada: arr[] = {3, 2, 1}
Salida: -1
Enfoque ingenuo: el enfoque más simple es generar todos los tripletes posibles a partir de la array dada arr[] y, si existe algún triplete que satisfaga la condición dada, imprimir ese triplete. De lo contrario, imprima «-1» .
Complejidad de Tiempo: O(N 3 )
Espacio Auxiliar: O(1)
Enfoque eficiente: el enfoque anterior se puede optimizar al observar el hecho de que la array contiene solo elementos distintos del rango [1, N] . Si existe algún triplete con los criterios dados, entonces ese triplete debe ser adyacente entre sí.
Por lo tanto, la idea es recorrer el arreglo dado arr[] sobre el rango [1, N – 2] y si existe algún índice i tal que arr[i – 1] < arr[i] y arr[i] > arr [i + 1] , luego imprima el triplete (i – 1, i, i + 1) como resultado. De lo contrario, imprima «-1» .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find a triplet such // that i < j < k and arr[i] < arr[j] // and arr[j] > arr[k] void print_triplet(int arr[], int n) { // Traverse the array for (int i = 1; i <= n - 2; i++) { // Condition to satisfy for // the resultant triplet if (arr[i - 1] < arr[i] && arr[i] > arr[i + 1]) { cout << i - 1 << " " << i << " " << i + 1; return; } } // Otherwise, triplet doesn't exist cout << -1; } // Driver Code int main() { int arr[] = { 4, 3, 5, 2, 1, 6 }; int N = sizeof(arr) / sizeof(int); print_triplet(arr, N); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG{ // Function to find a triplet such // that i < j < k and arr[i] < arr[j] // and arr[j] > arr[k] static void print_triplet(int arr[], int n) { // Traverse the array for(int i = 1; i <= n - 2; i++) { // Condition to satisfy for // the resultant triplet if (arr[i - 1] < arr[i] && arr[i] > arr[i + 1]) { System.out.print(i - 1 + " " + i + " " + (i + 1)); return; } } // Otherwise, triplet doesn't exist System.out.print(-1); } // Driver code public static void main(String[] args) { int arr[] = { 4, 3, 5, 2, 1, 6 }; int N = arr.length; print_triplet(arr, N); } } // This code is contributed by sanjoy_62
Python3
# Python3 program for the above approach # Function to find a triplet such # that i < j < k and arr[i] < arr[j] # and arr[j] > arr[k] def print_triplet(arr, n): # Traverse the array for i in range(1, n - 1): # Condition to satisfy for # the resultant triplet if (arr[i - 1] < arr[i] and arr[i] > arr[i + 1]): print(i - 1, i, i + 1) return # Otherwise, triplet doesn't exist print(-1) # Driver Code if __name__ == "__main__": arr = [ 4, 3, 5, 2, 1, 6 ] N = len(arr) print_triplet(arr, N) # This code is contributed by chitranayal
C#
// C# program to implement // the above approach using System; public class GFG { // Function to find a triplet such // that i < j < k and arr[i] < arr[j] // and arr[j] > arr[k] static void print_triplet(int[] arr, int n) { // Traverse the array for(int i = 1; i <= n - 2; i++) { // Condition to satisfy for // the resultant triplet if (arr[i - 1] < arr[i] && arr[i] > arr[i + 1]) { Console.Write(i - 1 + " " + i + " " + (i + 1)); return; } } // Otherwise, triplet doesn't exist Console.Write(-1); } // Driver Code public static void Main(String[] args) { int[] arr = { 4, 3, 5, 2, 1, 6 }; int N = arr.Length; print_triplet(arr, N); } } // This code is contributed by splevel62.
Javascript
<script> // JavaScript program to implement // the above approach // Function to find a triplet such // that i < j < k and arr[i] < arr[j] // and arr[j] > arr[k] function print_triplet(arr, n) { // Traverse the array for (var i = 1; i <= n - 2; i++) { // Condition to satisfy for // the resultant triplet if (arr[i - 1] < arr[i] && arr[i] > arr[i + 1]) { document.write(i - 1 + " " + i + " " + (i + 1)); return; } } // Otherwise, triplet doesn't exist document.write(-1); } // Driver Code var arr = [4, 3, 5, 2, 1, 6]; var N = arr.length; print_triplet(arr, N); </script>
1 2 3
Complejidad temporal: O(N)
Espacio auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por rohitmanathiya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA