Recuento de subsecuencias que tienen valores AND bit a bit impares en la array dada

Dada una array arr[] de N enteros, la tarea es encontrar el número de subsecuencias de la array dada de modo que su valor AND bit a bit sea impar.

Ejemplos:

Entrada: arr[] = {2, 3, 1}
Salida: 3
Explicación: Las subsecuencias de la array dada que tienen valores AND bit a bit impares son {3} = 3, {1} = 1, {3, 1} = 3 & 1 = 1.

Entrada: arr[] = {1, 3, 3}
Salida: 7

Recomendado: pruebe su enfoque en {IDE} primero, antes de pasar a la solución.

Enfoque ingenuo: el problema dado se puede resolver generando todas las subsecuencias de la array dada arr[] y realizar un seguimiento del recuento de subsecuencias de modo que su valor AND bit a bit sea impar.

Complejidad de Tiempo: O(N * 2 N )
Espacio Auxiliar: O(1)

Enfoque eficiente: el enfoque anterior puede optimizarse mediante la observación de que para que el valor AND bit a bit de un conjunto de enteros sea impar, el bit menos significativo de todos y cada uno de los elementos del conjunto debe ser un bit establecido . Por lo tanto, para que una subsecuencia tenga un valor AND bit a bit impar, todos los elementos de la subsecuencia deben ser impares. Usando esta observación, el problema dado se puede resolver siguiendo los pasos a continuación:

  • Cree una variable odd , que almacene el número total de enteros impares en la array dada arr[] . Inicializarlo con 0 .
  • Itere a través de la array e incremente el valor de impar en 1 si el entero actual es un entero impar.
  • El recuento de subsecuencias no vacías de una array que tiene X elementos es 2 X – 1 . Por lo tanto, el número de subsecuencias no vacías con todos los elementos impares es 2 impar – 1 , que es la respuesta requerida.

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find count of subsequences
// having odd bitwise AND value
int countSubsequences(vector<int> arr)
{
    // Stores count of odd elements
    int odd = 0;
 
    // Traverse the array arr[]
    for (int x : arr) {
 
        // If x is odd increment count
        if (x & 1)
            odd++;
    }
 
    // Return Answer
    return (1 << odd) - 1;
}
 
// Driver Code
int main()
{
    vector<int> arr = { 1, 3, 3 };
 
    // Function Call
    cout << countSubsequences(arr);
 
    return 0;
}

Java

// Java program for the above approach
import java.io.*;
class GFG {
 
    // Function to find count of subsequences
    // having odd bitwise AND value
    static int countSubsequences(int arr[], int N)
    {
        // Stores count of odd elements
        int odd = 0;
 
        // Traverse the array arr[]
        for (int i = 0; i < N; i++) {
 
            // If x is odd increment count
            if ((arr[i] & 1) % 2 == 1)
                odd++;
        }
 
        // Return Answer
        return (1 << odd) - 1;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int N = 3;
 
        int arr[] = { 1, 3, 3 };
        // Function Call
        System.out.println(countSubsequences(arr, N));
    }
}
 
// This code is contributed by dwivediyash

Python3

# python program for the above approach
 
# Function to find count of subsequences
# having odd bitwise AND value
def countSubsequences(arr):
 
    # Stores count of odd elements
    odd = 0
 
    # Traverse the array arr[]
    for x in arr:
 
        # If x is odd increment count
        if (x & 1):
            odd = odd + 1
 
    # Return Answer
    return (1 << odd) - 1
 
# Driver Code
if __name__ == "__main__":
 
    arr = [1, 3, 3]
 
    # Function Call
    print(countSubsequences(arr))
     
# This code is contributed by rakeshsahni

C#

// C# program for the above approach
using System;
 
public class GFG
{
 
    // Function to find count of subsequences
    // having odd bitwise AND value
    static int countSubsequences(int []arr, int N)
    {
       
        // Stores count of odd elements
        int odd = 0;
 
        // Traverse the array arr[]
        for (int i = 0; i < N; i++) {
 
            // If x is odd increment count
            if ((arr[i] & 1) % 2 == 1)
                odd++;
        }
 
        // Return Answer
        return (1 << odd) - 1;
    }
 
    // Driver Code
    public static void Main(string[] args)
    {
        int N = 3;
 
        int []arr = { 1, 3, 3 };
         
        // Function Call
        Console.WriteLine(countSubsequences(arr, N));
    }
}
 
// This code is contributed by AnkThon

Javascript

<script>
// Javascript program for the above approach
 
// Function to find count of subsequences
// having odd bitwise AND value
function countSubsequences(arr)
{
    // Stores count of odd elements
    let odd = 0;
 
    // Traverse the array arr[]
    for (let x = 0; x < arr.length; x++) {
 
        // If x is odd increment count
        if (arr[x] & 1)
            odd++;
    }
 
    // Return Answer
    return (1 << odd) - 1;
}
 
// Driver Code
    let arr = [ 1, 3, 3 ];
 
    // Function Call
    document.write(countSubsequences(arr));
 
// This code is contributed by subham348.
</script>
Producción: 

7

 

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

Publicación traducida automáticamente

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