Encuentre un triplete en una array tal que arr[i] arr[k] e i < j < k

Dada una array arr[] que consiste en una permutación de los primeros N números naturales, la tarea es encontrar un triplete (i, j, k) de la array dada tal que arr[i] < arr[j] > arr[k] , donde (i < j < k) . Si existen varios tripletes, imprima cualquier triplete válido de índices. De lo contrario, imprima -1 .

Ejemplos:

Entrada: arr[] = {2, 1, 4, 3} 
Salida: 1 2 3 
Explicación: El triplete que satisface la condición dada es (arr[1], arr[2], arr[3]) 
Por lo tanto, la salida requerida es 1 2 3 .

Entrada: arr[] = {1, 2, 3, 4, 5} 
Salida: -1

 

Enfoque ingenuo: el enfoque más simple para resolver este problema es atravesar la array y generar todos los tripletes posibles de la array dada y, para cada triplete, verificar si satisface las condiciones dadas o no. Si se encuentra que es cierto, imprima ese triplete. De lo contrario, imprima -1

Complejidad de Tiempo: O(N 3 )
Espacio Auxiliar: O(1)

Enfoque eficiente: Para optimizar el enfoque anterior, la idea se basa en las siguientes observaciones: 

  • Si la array dada se ordena en orden ascendente o descendente desde el rango de índice [1, N – 2] , entonces la solución no existe.
  • De lo contrario, existe al menos un índice en la array dada, de modo que el elemento justo antes y después del índice en cuestión es menor que el elemento actual.

Siga los pasos a continuación para resolver el problema:

  • Recorra la array dada y para cada índice de array, verifique si el elemento justo antes y después del índice actual es menor que el elemento actual o no. Si se encuentra que es cierto, imprima que el triplete (i – 1, i, i + 1) .
  • De lo contrario, imprima -1 .

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program to implement
// the above approach
#include <iostream>
using namespace std;
 
// Function to find a triplet
// that satisfy the conditions
void FindTrip(int arr[], int N)
{
     
    // Traverse the given array
    for(int i = 1; i < N - 1; i++)
    {
         
        // Stores current element
        int p = arr[i - 1];
         
        // Stores element just before
        // the current element
        int q = arr[i];
         
        // Stores element just after
        // the current element
        int r = arr[i + 1];
         
        // Check the given conditions
        if (p < q && q > r)
        {
             
            // Print a triplet
            cout << i - 1 << " "
                 << i << " " << i + 1;
             
            return;
        }
    }
     
    // If no triplet found
    cout << -1;
}
 
// Driver Code
int main()
{
    int arr[] = { 2, 1, 4, 3 };
     
    int N = sizeof(arr) / sizeof(arr[0]);
     
    FindTrip(arr, N);
     
    return 0;
}
 
// This code is contributed by jyoti369

Java

// Java program to implement
// the above approach
import java.util.*;
class GFG {
 
    // Function to find a triplet
    // that satisfy the conditions
    static void FindTrip(int arr[],
                        int N)
    {
        // Traverse the given array
        for (int i = 1; i < N - 1;
            i++) {
 
            // Stores current element
            int p = arr[i - 1];
 
            // Stores element just before
            // the current element
            int q = arr[i];
 
            // Stores element just after
            // the current element
            int r = arr[i + 1];
 
            // Check the given conditions
            if (p < q && q > r) {
 
                // Print a triplet
                System.out.println(
                    (i - 1) + " "
                    + (i) + " "
                    + (i + 1));
                return;
            }
        }
 
        // If no triplet found
        System.out.println(-1);
    }
 
    // Driver Code
    public static void main(String args[])
    {
        int arr[] = { 2, 1, 4, 3 };
 
        int N = arr.length;
        FindTrip(arr, N);
    }
}

Python3

# Python3 program to implement
# the above approach
 
# Function to find a triplet
# that satisfy the conditions
def FindTrip(arr, N):
     
    # Traverse the given array
    for i in range(1, N - 1):
         
        # Stores current element
        p = arr[i - 1]
 
        # Stores element just before
        # the current element
        q = arr[i]
 
        # Stores element just after
        # the current element
        r = arr[i + 1]
 
        # Check the given conditions
        if (p < q and q > r):
 
            # Print a triplet
            print(i - 1, i, i + 1)
 
            return
 
    # If no triplet found
    print(-1)
 
# Driver Code
if __name__ == '__main__':
     
    arr = [ 2, 1, 4, 3 ]
 
    N = len(arr)
 
    FindTrip(arr, N)
 
# This code is contributed by mohit kumar 29

C#

// C# program to implement
// the above approach 
using System;
 
class GFG{
  
// Function to find a triplet
// that satisfy the conditions
static void FindTrip(int[] arr, int N)
{
     
    // Traverse the given array
    for(int i = 1; i < N - 1; i++)
    {
         
        // Stores current element
        int p = arr[i - 1];
 
        // Stores element just before
        // the current element
        int q = arr[i];
 
        // Stores element just after
        // the current element
        int r = arr[i + 1];
 
        // Check the given conditions
        if (p < q && q > r)
        {
             
            // Print a triplet
            Console.WriteLine((i - 1) + " " +
                              (i) + " " + (i + 1));
            return;
        }
    }
 
    // If no triplet found
    Console.WriteLine(-1);
}
 
// Driver Code
public static void Main()
{
    int[] arr = { 2, 1, 4, 3 };
    int N = arr.Length;
     
    FindTrip(arr, N);
}
}
 
// This code is contributed by code_hunt

Javascript

<script>
// Javascript program to implement
// the above approach
 
    // Function to find a triplet
    // that satisfy the conditions
    function FindTrip(arr, N)
    {
        // Traverse the given array
        for (let i = 1; i < N - 1;
            i++) {
   
            // Stores current element
            let p = arr[i - 1];
   
            // Stores element just before
            // the current element
            let q = arr[i];
   
            // Stores element just after
            // the current element
            let r = arr[i + 1];
   
            // Check the given conditions
            if (p < q && q > r) {
   
                // Print a triplet
                document.write(
                    (i - 1) + " "
                    + (i) + " "
                    + (i + 1));
                return;
            }
        }
   
        // If no triplet found
        document.write(-1);
    }
     
    // Driver Code
      
           let arr = [2, 1, 4, 3 ];
   
        let N = arr.length;
        FindTrip(arr, N);
   
</script>

Producción:

1 2 3

Complejidad de tiempo: O(N)

Espacio Auxiliar: O(1)
 

Publicación traducida automáticamente

Artículo escrito por jyoti369 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 *