Encuentre dos enteros tales que al menos uno exista en cada Par dado

Dados N pares de enteros, cada entero está entre 1 y M , la tarea es verificar si existen dos enteros x e y tales que al menos uno de los enteros esté presente en cada uno de los pares. 

Ejemplos:

Entrada:  N = 7, M = 6, arr[] = {{5, 6}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5} , {4, 5}}
Salida: NO
Explicación: No se puede elegir ninguna x o y porque 
para cada uno de esos pares puede encontrar un par dado 
donde ambos números son diferentes de los enteros elegidos.

Entrada:  N = 5, M = 6, {{6, 4}, {2, 3}, {3, 4}, {4, 5}, {5, 6}}
Salida:
Explicación: Elija x = 5 y y = 3.
Porque ya sea x o y está presente en todos los pares.

 

Enfoque 1: El problema se puede resolver con base en la siguiente idea:

Considere que el primer par de la array es el par deseado (x, y). Si hay un par en el que ninguno de los elementos está presente, entonces uno de ese par dado debe ser parte del par deseado.

Así que ahora hay un total de 4 elementos que pueden formar el par deseado. Comprueba todas las combinaciones posibles de parejas y encuentra si alguna de ellas es la pareja deseada. 

Siga los pasos para resolver el problema:

  • Cree 2 variables (x1, y1) que contengan cada uno de los primeros elementos de la array.
  • Ahora atraviesa de i = 0 a N-1 :
    • Compruebe si ninguno de x1 o y1 está presente en el par.
    • Si la condición anterior es verdadera, considere que los elementos son otro par (x2, y2) .
  • Ahora verifique las 6 combinaciones posibles de x1, x2, y1 e y2. 
    • Si existe una de estas combinaciones en cada par dado, entonces la solución es posible.
    • De lo contrario, no existe tal par.

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

Java

// Java  code ot implement the approach
class GFG
{
 
  // Function to check if x or y is present
  // in each of the given pairs
  static boolean check(int x, int y, int[][] arr) {
    for (int i = 0; i < arr.length; i++)
      if (x != arr[i][0] && y != arr[i][0] && x != arr[i][1] && y != arr[i][1])
        return false;
    return true;
  }
 
  // Function to find the desired pair
  static String pairs(int n, int[][] arr) {
    int x1 = arr[0][0];
    int y1 = arr[0][1];
    int x2 = 0;
    int y2 = 0;
 
    // Finding values which do not contain
    // the values in 1st array index
    for (int i = 1; i < n; i++) {
 
      if (x1 != arr[i][0] && x1 != arr[i][1] && y1 != arr[i][0] && y1 != arr[i][1]) {
        x2 = arr[i][0];
        y2 = arr[i][1];
      }
    }
    if (check(x1, x2, arr) || check(x1, y1, arr) || check(x1, y2, arr) || check(x2, y1, arr) || check(x2, y2, arr)
        || check(y1, y2, arr))
      return "Yes";
    else
      return "No";
  }
 
  // Driver code
  public static void main(String[] args) {
 
    int N = 6;
    int M = 5;
    int[][] arr = { { 2, 3 }, { 2, 4 }, { 2, 5 }, { 3, 4 }, { 3, 5 }, { 4, 5 } };
 
    // Function call
    System.out.println(pairs(N, arr));
  }
}
 
// This code is contributed by shikhasingrajput

Python3

# Python 3 code ot implement the approach
 
# Function to check if x or y is present
# in each of the given pairs
def check(x, y, arr):
    for i in range(len(arr)):
        if x != arr[i][0] and y != arr[i][0] \
        and x != arr[i][1] and y != arr[i][1]:
            return False
    return True
 
# Function to find the desired pair
def pairs(n, arr):
    x1 = arr[0][0]
    y1 = arr[0][1]
    x2 = 0
    y2 = 0
     
    # Finding values which do not contain
    # the values in 1st array index
    for i in range(1, n):
        if x1 != arr[i][0] and x1 != arr[i][1] \
        and y1 != arr[i][0] and y1 != arr[i][1]:
            x2 = arr[i][0]
            y2 = arr[i][1]
    if check(x1, x2, arr) or check(x1, y1, arr) or \
    check(x1, y2, arr) or check(x2, y1, arr) or \
    check(x2, y2, arr) or check(y1, y2, arr):
        return 'YES'
    else:
        return 'NO'
 
# Driver code
if  __name__ == '__main__':
    N = 6
    M = 5
    arr = [[2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]
     
    # Function call
    print(pairs(N, arr))

C#

// C#  code ot implement the approach
 
using System;
 
class GFG {
 
    // Function to check if x or y is present
    // in each of the given pairs
    static bool check(int x, int y, int[, ] arr)
    {
        for (int i = 0; i < arr.Length; i++)
            if (x != arr[i, 0] && y != arr[i, 0]
                && x != arr[i, 1] && y != arr[i, 1])
                return false;
        return true;
    }
 
    // Function to find the desired pair
    static string pairs(int n, int[, ] arr)
    {
        int x1 = arr[0, 0];
        int y1 = arr[0, 1];
        int x2 = 0;
        int y2 = 0;
 
        // Finding values which do not contain
        // the values in 1st array index
        for (int i = 1; i < n; i++) {
 
            if (x1 != arr[i, 0] && x1 != arr[i, 1]
                && y1 != arr[i, 0] && y1 != arr[i, 1]) {
                x2 = arr[i, 0];
                y2 = arr[i, 1];
            }
        }
        if (check(x1, x2, arr) || check(x1, y1, arr)
            || check(x1, y2, arr) || check(x2, y1, arr)
            || check(x2, y2, arr) || check(y1, y2, arr))
            return "Yes";
        else
            return "No";
    }
 
    // Driver code
    public static void Main(string[] args)
    {
 
        int N = 6;
        int M = 5;
        int[, ] arr = { { 2, 3 }, { 2, 4 }, { 2, 5 },
                        { 3, 4 }, { 3, 5 }, { 4, 5 } };
 
        // Function call
        Console.WriteLine(pairs(N, arr));
    }
}
 
// This code is contributed by phasing17
Producción

NO

Complejidad temporal: O(N).
Espacio Auxiliar: O(1)

Enfoque 2: La idea de este enfoque también es similar a la mencionada anteriormente. La única diferencia es que:

En el caso anterior, estábamos utilizando todas las combinaciones posibles. Si se observa cuidadosamente, podemos concluir que debe haber un valor del par (x1, y1) y un valor de (x2, y2) porque si esto no se hace, uno de los pares será despreciado. 

Entonces, en este caso, solo buscaremos 4 pares posibles, es decir, (x1, y2), (x1, x2), (y1, y2) y (x2, y1).

Siga los pasos mencionados a continuación para implementar la idea:

  1. Considere el primer elemento del primer par. Digamos que (x1, y1) es un par, luego considere x1 .
  2. Encuentra el par donde x1 no existe.
  3. Considere ese par como (x2, y2) y tome el valor x2 :
    1. Compruebe todos los demás pares si (x1, x2) existe en cada par.
    2. Si sale, imprima ‘Sí’, de lo contrario, repita el paso 3 con el valor y2.
  4. Si el par (x1, y2) sale en cada par, imprima ‘Sí’; de lo contrario, repita los pasos 1 a 3 con el valor y1 .
  5. Si después de la operación anterior todavía no hay ningún par, entonces ese par no es posible.

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

Java

// Java code to implement the approach
 
import java.io.*;
 
class GFG {
 
    // Function to check if x or y is present in each of the
    // given pairs
    public static boolean check(int x, int y, int[][] arr,
                                int n)
    {
        // Loop to check if x or y is present in the pairs
        for (int i = 1; i < n; i++) {
            if (arr[i][0] == y || arr[i][1] == y
                || arr[i][0] == x || arr[i][1] == x) {
                continue;
            }
            else {
                // If x and y are not present in all the
                // array pairs
                return true;
            }
        }
        return false;
    }
 
    // Function to find the index of the first pair where x
    // is not present
    public static int findIndex(int x, int[][] arr, int n)
    {
        for (int i = 1; i < n; i++) {
            if (arr[i][0] != x && arr[i][1] != x) {
                return i;
            }
        }
        return n;
    }
 
    // Function to find if the required pair is present in
    // array or not.
    public static String find(int[][] a, int n)
    {
        int x = a[0][0];
        int k = findIndex(x, a, n);
 
        // Taking the first value of kth index
        if (k >= n) {
            return "YES";
        }
        int y = a[k][0];
        int flag = 0;
 
        // If x and y are not in all array pairs
        if (check(x, y, a, n)) {
            // Considering second value of kth index
            y = a[k][1];
            // If x and y are not in all array pairs
            if (check(x, y, a, n)) {
                // Second element is in 1st index
                x = a[0][1];
                k = findIndex(x, a, n);
                if (k >= n) {
                    return "YES";
                }
                // Taking the first value of kth index
                y = a[k][0];
                if (check(x, y, a, n)) {
                    // Considering second value of kth index
                    y = a[k][1];
                    if (check(x, y, a, n)) {
                        return "NO";
                    }
                }
            }
        }
        return "YES";
    }
 
    public static void main(String[] args)
    {
        int N = 6;
        int M = 5;
 
        int[][] arr = { { 2, 3 }, { 2, 4 }, { 2, 5 },
                        { 3, 4 }, { 3, 5 }, { 4, 5 } };
 
        // Function call
        System.out.print(find(arr, N));
    }
}
 
// This code is contributed by lokesh (lokeshmvs21).

Python3

# Python 3 code to implement the approach
 
# Function to check if x or y is present
# in each of the given pairs
def check(x, y, arr, n):
 
    # Loop to check if x or y is present in the pairs
    for i in range(1, n):
        if arr[i][0] == y or arr[i][1] == y \
                or arr[i][0] == x or arr[i][1] == x:
            continue
        else:
 
            # If x and y are not present
            # in all the array pairs
            return True
    return False
 
 
# Function to find the index of the
# first pair where x is not present
def findIndex(x, arr, n):
    for i in range(1, n):
        if arr[i][0] != x and arr[i][1] != x:
            return i
    return n
 
 
# Function to find if the
# required pair is present in array or not
def find(a, n):
    x = a[0][0]
    k = findIndex(x, a, n)
 
    # Taking the fisrt value of kth index
    if k >= n:
        return 'YES'
    y = a[k][0]
    flag = 0
 
    # If x and y are not in all array pairs
    if check(x, y, a, n):
 
        # Considering second value of kth index
        y = a[k][1]
 
        # If x and y are not in all array pairs
        if check(x, y, a, n):
 
            # Cecond element in 1st index
            x = a[0][1]
            k = findIndex(x, a, n)
            if k >= n:
                return 'YES'
 
            # Taking the fisrt value of kth index
            y = a[k][0]
            if check(x, y, a, n):
 
                # Considering second value of kth index
                y = a[k][1]
                if check(x, y, a, n):
                    return 'NO'
    return 'YES'
 
 
# Driver code
if __name__ == '__main__':
    N = 6
    M = 5
    arr = [[2, 3], [2, 4], [2, 5], [3, 4], [3, 5], [4, 5]]
 
    # Function call
    print(find(arr, N))
Producción

NO

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

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