Encuentre el tamaño del grupo más grande donde los grupos están de acuerdo con el xor de dígitos

Dado un número entero N , la tarea es encontrar el tamaño del grupo más grande en un rango de 1 a N , donde dos números pertenecen al mismo grupo si xor de sus dígitos es el mismo.

Ejemplos:  

Entrada: N = 13 
Salida:
Explicación: 
Son 10 grupos en total, se agrupan según el xor de sus dígitos de números del 1 al 13: [11] [1, 10] [2, 13] [3, 12] [4] [5] [6] [7] [8] [9]. 
De estos, 3 grupos tienen el tamaño más grande que es 2.

Entrada: N = 2 
Salida:
Explicación: 
Son 2 grupos en total, se agrupan según el xor de sus dígitos de números del 1 al 2: [1] [2]. 
De estos, ambos grupos tienen el tamaño más grande que es 1. 
 

Enfoque: 
para resolver el problema mencionado anteriormente, tenemos que almacenar el xor de dígitos de cada elemento de 1 a N usando un mapa hash e incrementar su frecuencia si se repite. Luego encuentre la frecuencia máxima dentro del mapa hash, que sería el tamaño más grande del grupo. Y finalmente, cuente todos los grupos que tienen el mismo conteo de frecuencia que el grupo más grande y devuelva el conteo.

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

C++14

// c++ implementation to Find the
// size of largest group, where groups
// are according to the xor of its digits.
#include <bits/stdc++.h>
using namespace std;
 
// Function to find out xor of digit
int digit_xor(int x)
{
    int xorr = 0;
 
    // calculate xor digitwise
    while (x) {
        xorr ^= x % 10;
        x = x / 10;
    }
 
    // return xor
    return xorr;
}
 
// Function to find the
// size of largest group
int find_count(int n)
{
    // hash map for counting frequency
    map<int, int> mpp;
 
    for (int i = 1; i <= n; i++) {
 
        // counting freq of each element
        mpp[digit_xor(i)] += 1;
    }
 
    int maxm = 0;
    for (auto x : mpp) {
        // find the maximum
        if (x.second > maxm)
 
            maxm = x.second;
    }
 
    return maxm;
}
 
// Driver code
int main()
{
    // initialise N
    int N = 13;
 
    cout << find_count(N);
 
    return 0;
}

Java

// Java implementation to Find the
// size of largest group, where groups
// are according to the xor of its digits.
import java.util.*;
class GFG{
 
// Function to find out xor of digit
static int digit_xor(int x)
{
    int xorr = 0;
 
    // calculate xor digitwise
    while (x > 0)
    {
        xorr ^= x % 10;
        x = x / 10;
    }
 
    // return xor
    return xorr;
}
 
// Function to find the
// size of largest group
static int find_count(int n)
{
    // hash map for counting frequency
    HashMap<Integer,
            Integer> mpp = new HashMap<Integer,
                                       Integer>();
 
    for (int i = 1; i <= n; i++)
    {
        // counting freq of each element
        if(mpp.containsKey(digit_xor(i)))
            mpp.put(digit_xor(i),
                    mpp.get(digit_xor(i)) + 1);
        else
            mpp.put(digit_xor(i), 1);
    }
 
    int maxm = 0;
    for (Map.Entry<Integer,
                   Integer> x : mpp.entrySet())
    {
        // find the maximum
        if (x.getValue() > maxm)
 
            maxm = x.getValue();
    }
    return maxm;
}
 
// Driver code
public static void main(String[] args)
{
    // initialise N
    int N = 13;
 
    System.out.print(find_count(N));
}
}
 
// This code is contributed by shikhasingrajput

Python3

# Python3 implementation to find the
# size of largest group, where groups
# are according to the xor of its digits.
 
# Function to find out xor of digit
def digit_xor(x):
 
    xorr = 0
 
    # Calculate xor digitwise
    while (x != 0):
        xorr ^= x % 10
        x = x // 10
 
    # Return xor
    return xorr
 
# Function to find the
# size of largest group
def find_count(n):
 
    # Hash map for counting frequency
    mpp = {}
 
    for i in range(1, n + 1):
 
        # Counting freq of each element
        if digit_xor(i) in mpp:
            mpp[digit_xor(i)] += 1
        else:
            mpp[digit_xor(i)] = 1
 
    maxm = 0
     
    for x in mpp:
         
        # Find the maximum
        if (mpp[x] > maxm):
            maxm = mpp[x]
 
    return maxm
 
# Driver code
 
# Initialise N
N = 13
 
print(find_count(N))
 
# This code is contributed by divyeshrabadiya07

C#

// C# implementation to Find the
// size of largest group, where groups
// are according to the xor of its digits.
using System;
using System.Collections.Generic;
class GFG{
 
// Function to find out xor of digit
static int digit_xor(int x)
{
    int xorr = 0;
 
    // calculate xor digitwise
    while (x > 0)
    {
        xorr ^= x % 10;
        x = x / 10;
    }
 
    // return xor
    return xorr;
}
 
// Function to find the
// size of largest group
static int find_count(int n)
{
    // hash map for counting frequency
    Dictionary<int,
               int> mpp = new Dictionary<int,
                                         int>();
 
    for (int i = 1; i <= n; i++)
    {
        // counting freq of each element
        if(mpp.ContainsKey(digit_xor(i)))
            mpp[digit_xor(i)] =
                mpp[digit_xor(i)] + 1;
        else
            mpp.Add(digit_xor(i), 1);
    }
 
    int maxm = 0;
    foreach (KeyValuePair<int,
                          int> x in mpp)
    {
        // find the maximum
        if (x.Value > maxm)
 
            maxm = x.Value;
    }
    return maxm;
}
 
// Driver code
public static void Main(String[] args)
{
    // initialise N
    int N = 13;
 
    Console.Write(find_count(N));
}
}
 
 // This code is contributed by shikhasingrajput

Javascript

<script>
 
// JavaScript implementation to Find the
// size of largest group, where groups
// are according to the xor of its digits.
 
// Function to find out xor of digit
function digit_xor(x)
{
    let xorr = 0;
 
    // calculate xor digitwise
    while (x)
    {
        xorr ^= x % 10;
        x = x / 10;
    }
 
    // return xor
    return xorr;
}
 
// Function to find the
// size of largest group
function find_count(n)
{
     
    // hash map for counting frequency
    let mpp = new Map();
 
    for(let i = 1; i <= n; i++)
    {
         
        // Counting freq of each element
        let t = digit_xor(i);
        if (mpp.has(t))
        {
            mpp.set(t, mpp.get(t) + 1)
        }
        else
        {
            mpp.set(t, 1)
        }
    }
 
    let maxm = 0;
    for(let x of mpp)
    {
         
        // Find the maximum
           if (x[1] > maxm)
            maxm = x[1];   
    }
    return maxm;
}
 
// Driver code
 
// initialise N
let N = 13;
 
document.write(find_count(N));
 
// This code is contributed by Dharanendra L V.
 
</script>
Producción: 

2

 

Publicación traducida automáticamente

Artículo escrito por mohit kumar 29 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 *