Problema de tuercas y pernos (problema de cerradura y llave) | Conjunto 2 (mapa hash)

Dado un conjunto de n tuercas de diferentes tamaños y n pernos de diferentes tamaños. Hay un mapeo uno a uno entre tuercas y tornillos. Haga coincidir tuercas y tornillos de manera eficiente. 
Restricción: No se permite la comparación de una tuerca con otra tuerca o un perno con otro perno. Significa que la tuerca solo se puede comparar con el perno y el perno solo se puede comparar con una tuerca para ver cuál es más grande o más pequeño.

Ejemplos: 

Input : nuts[] = {'@', '#', '$', '%', '^', '&'}
        bolts[] = {'$', '%', '&', '^', '@', '#'}
Output : Matched nuts and bolts are-
        $ % & ^ @ # 
        $ % & ^ @ #  

Otra forma de plantear este problema es, dada una caja con cerraduras y llaves donde una cerradura puede abrirse con una llave en la caja. Tenemos que hacer coincidir la pareja.

Hemos discutido una solución basada en clasificación debajo de la publicación.
Problema de tuercas y pernos (problema de cerradura y llave) | Serie 1

En esta publicación, se analiza el enfoque basado en hashmap. 

  1. Atraviesa la array de nueces y crea un mapa hash
  2. Recorra la array de pernos y búsquela en hashmap.
  3. Si se encuentra en el mapa hash de nueces, significa que existen pernos para esa tuerca.

Implementación:

C++

// Hashmap based solution to solve
#include <bits/stdc++.h>
using namespace std;
 
// function to match nuts and bolts
void nutboltmatch(char nuts[], char bolts[], int n)
{
    unordered_map<char, int> hash;
 
    // creating a hashmap for nuts
    for (int i = 0; i < n; i++)
        hash[nuts[i]] = i;
 
    // searching for nuts for each bolt in hash map
    for (int i = 0; i < n; i++)
        if (hash.find(bolts[i]) != hash.end())
            nuts[i] = bolts[i];
 
    // print the result
    cout << "matched nuts and bolts are-" << endl;
    for (int i = 0; i < n; i++)
        cout << nuts[i] << " ";
    cout << endl;
    for (int i = 0; i < n; i++)
        cout << bolts[i] << " ";
}
 
// Driver code
int main()
{
    char nuts[] = {'@', '#', '$', '%', '^', '&'};
    char bolts[] = {'$', '%', '&', '^', '@', '#'};
    int n = sizeof(nuts) / sizeof(nuts[0]);
    nutboltmatch(nuts, bolts, n);
    return 0;
}

Java

// Hashmap based solution to solve
import java.util.HashMap;
class GFG
{
 
  // function to match nuts and bolts
  static void nutboltmatch(char nuts[], char bolts[], int n)
  {
    HashMap<Character, Integer> hash = new HashMap<>();
 
    // creating a hashmap for nuts
    for (int i = 0; i < n; i++)
      hash.put(nuts[i], i);
 
    // searching for nuts for each bolt in hash map
    for (int i = 0; i < n; i++)
      if (hash.containsKey(bolts[i]))
        nuts[i] = bolts[i];
 
    // print the result
    System.out.println("matched nuts and bolts are-");
    for (int i = 0; i < n; i++)
      System.out.print(nuts[i] + " ");
    System.out.println();
    for (int i = 0; i < n; i++)
      System.out.print(bolts[i] + " ");
  }
 
  // Driver code
  public static void main(String[] args)
  {
    char nuts[] = { '@', '#', '$', '%', '^', '&' };
    char bolts[] = { '$', '%', '&', '^', '@', '#' };
    int n = nuts.length;
    nutboltmatch(nuts, bolts, n);
  }
}
 
// This code is contributed by sanjeev2552

Python3

# Python3 program to implement
# above approach
# Hashmap based solution to
# solve
 
# Function to match nuts and
# bolts
def nutboltmatch(nuts,
                 bolts, n):
 
    hash1 = {}
 
    # creating a hashmap
    # for nuts
    for i in range(n):
        hash1[nuts[i]] = i
 
    # searching for nuts for
    # each bolt in hash map
    for i in range(n):
        if (bolts[i] in hash1):
            nuts[i] = bolts[i]
 
    # Print the result
    print("matched nuts and bolts are-")
    for i in range(n):
        print(nuts[i],
              end = " ")
    print()
    for i in range(n):
        print(bolts[i],
              end = " ")
 
# Driver code
if __name__ == "__main__":
 
    nuts = ['@', '#', '$',
            '%', '^', '&']
    bolts = ['$', '%', '&',
             '^', '@', '#']
    n = len(nuts)
    nutboltmatch(nuts, bolts, n)
 
# This code is contributed by Chitranayal

C#

// Hashmap based solution to solve
using System;
using System.Collections.Generic;
 
public class GFG
{
 
  // function to match nuts and bolts
  static void nutboltmatch(char[] nuts, char[] bolts, int n)
  {
    Dictionary<char,int> hash = new Dictionary<char,int>();
 
    // creating a hashmap for nuts
    for (int i = 0; i < n; i++)
    {
      hash.Add(nuts[i], i);
    }
 
    // searching for nuts for each bolt in hash map
    for (int i = 0; i < n; i++)
      if (hash.ContainsKey(bolts[i]))
        nuts[i] = bolts[i];
 
    // print the result
    Console.WriteLine("matched nuts and bolts are-");
    for (int i = 0; i < n; i++)
      Console.Write(nuts[i] + " ");
    Console.WriteLine();
    for (int i = 0; i < n; i++)
      Console.Write(bolts[i] + " ");
  }
 
  // Driver code
  static public void Main ()
  {
 
    char[] nuts = { '@', '#', '$', '%', '^', '&' };
    char[] bolts = { '$', '%', '&', '^', '@', '#' };
    int n = nuts.Length;
    nutboltmatch(nuts, bolts, n);
 
  }
}
 
// This code is contributed by avanitrachhadiya2155

Javascript

<script>
 
// Hashmap based solution to solve
 
// function to match nuts and bolts
function nutboltmatch(nuts, bolts, n) {
    let hash = new Map();
 
    // creating a hashmap for nuts
    for (let i = 0; i < n; i++)
        hash.set(nuts[i], i);
 
    // searching for nuts for each bolt in hash map
    for (let i = 0; i < n; i++)
        if (hash.has(bolts[i]))
            nuts[i] = bolts[i];
 
    // print the result
    document.write("matched nuts and bolts are-<br>");
    for (let i = 0; i < n; i++)
        document.write(nuts[i] + " ");
    document.write("<br>");
    for (let i = 0; i < n; i++)
        document.write(bolts[i] + " ");
}
 
// Driver code
 
let nuts = ['@', '#', '$', '%', '^', '&'];
let bolts = ['$', '%', '&', '^', '@', '#'];
let n = nuts.length;
nutboltmatch(nuts, bolts, n);
 
</script>
Producción

matched nuts and bolts are-
$% & ^ @ # 
$% & ^ @ # 

La complejidad temporal de esta solución es O(n).

Este artículo es una contribución de Niteesh kumar . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *