Conjunto más grande con OR bit a bit igual a n

Dado un entero n, encuentre el mayor conjunto posible de enteros no negativos con OR bit a bit igual a n.
Ejemplos: 
 

Input : n = 5
Output : arr[] = [0, 1, 4, 5]
The bitwise OR of 0, 1, 4 and 5 equals 5. 
It is not possible to obtain a set larger than this.

Input : n = 8
Output : arr[] = [0, 8]

Requisito previo: subconjunto máximo con OR bit a bit igual a k
La diferencia entre el artículo mencionado anteriormente y esta publicación es la cantidad de elementos que se verificarán. En el artículo mencionado anteriormente, tenemos una array de n números y en esta publicación, tenemos el conjunto completo de números no negativos.
Atravesar una array era simple con la complejidad temporal de O(N), pero no es posible atravesar el conjunto ilimitado de números no negativos. Entonces, ¿cómo nos limitamos a un conjunto más pequeño de números?
La respuesta está en el concepto utilizado. Para cualquier número, x mayor que n, el OR bit a bit de x y n nunca será igual a n. 
Por lo tanto, solo necesitamos viajar de 0 a n para obtener nuestra respuesta.
La segunda diferencia es que siempre habrá una respuesta a esta pregunta. Por otro lado, no había certeza en la existencia de una respuesta en el artículo antes mencionado. Esto se debe a que siempre podemos incluir n en el conjunto resultante.
Algoritmo: 
Atraviesa los números de 0 a n, comprobando su OR bit a bit con n. Si el OR bit a bit es igual a n, incluya ese número en el conjunto resultante.
 

C++

// CPP Program to find the largest set
// with bitwise OR equal to n
#include <bits/stdc++.h>
using namespace std;
 
// function to find the largest set with
// bitwise OR equal to n
void setBitwiseORk(int n)
{
    vector<int> v;
 
    for (int i = 0; i <= n; i++) {
 
        // If the bitwise OR of n and i
        // is equal to n, then include i
        // in the set
        if ((i | n) == n)
            v.push_back(i);
    }
 
    for (int i = 0; i < v.size(); i++)
        cout << v[i] << ' ';
}
 
// Driver Code
int main()
{
    int n = 5;
 
    setBitwiseORk(n);
    return 0;
}

Java

// Java Program to find the largest set
// with bitwise OR equal to n
import java.util.*;
 
class GFG
{
 
    // function to find the largest set with
    // bitwise OR equal to n
    static void setBitwiseORk(int n)
    {
        Vector<Integer> v = new Vector<Integer>();
 
        for (int i = 0; i <= n; i++)
        {
 
            // If the bitwise OR of n and i
            // is equal to n, then include i
            // in the set
            if ((i | n) == n)
            {
                v.add(i);
            }
        }
 
        for (int i = 0; i < v.size(); i++)
        {
            System.out.print(v.get(i) + " ");
        }
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int n = 5;
 
        setBitwiseORk(n);
    }
}
 
/* This code contributed by PrinciRaj1992 */

Python3

# Python 3 Program to find the largest
# set with bitwise OR equal to n
 
# function to find the largest set
# with bitwise OR equal to n
def setBitwiseORk(n):
    v = []
 
    for i in range(0, n + 1, 1):
         
        # If the bitwise OR of n and i
        # is equal to n, then include i
        # in the set
        if ((i | n) == n):
            v.append(i)
 
    for i in range(0, len(v), 1):
        print(v[i], end = ' ')
 
# Driver Code
if __name__ == '__main__':
    n = 5
 
    setBitwiseORk(n)
 
# This code is contributed by
# Surendra_Gangwar

C#

// C# Program to find the largest set
// with bitwise OR equal to n
using System;
using System.Collections.Generic;
     
class GFG
{
 
    // function to find the largest set with
    // bitwise OR equal to n
    static void setBitwiseORk(int n)
    {
        List<int> v = new List<int>();
 
        for (int i = 0; i <= n; i++)
        {
 
            // If the bitwise OR of n and i
            // is equal to n, then include i
            // in the set
            if ((i | n) == n)
            {
                v.Add(i);
            }
        }
 
        for (int i = 0; i < v.Count; i++)
        {
            Console.Write(v[i] + " ");
        }
    }
 
    // Driver Code
    public static void Main(String[] args)
    {
        int n = 5;
 
        setBitwiseORk(n);
    }
}
 
// This code has been contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript Program to find the largest set
// with bitwise OR equal to n
 
// function to find the largest set with
// bitwise OR equal to n
function setBitwiseORk(n)
{
    var v = [];
 
    for (var i = 0; i <= n; i++) {
 
        // If the bitwise OR of n and i
        // is equal to n, then include i
        // in the set
        if ((i | n) == n)
            v.push(i);
    }
 
    for (var i = 0; i < v.length; i++)
        document.write( v[i] + ' ');
}
 
// Driver Code
var n = 5;
setBitwiseORk(n);
 
</script>

Producción:  

0 1 4 5

Complejidad del tiempo: O(N)
 

Publicación traducida automáticamente

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