Dada una array con n elementos. La tarea es encontrar el número máximo de elementos de array contiguos que tienen el mismo número de bits establecidos.
Ejemplos :
Input : arr[] = {14, 1, 2, 32, 12, 10} Output : 3 Elements 1, 2, 32 have same number of set bits and are contiguous. Input : arr[] = {1, 6, 9, 15, 8} Output : 2 Elements 6, 9 have same number of set bits.
Acercarse:
- Recorra la array de izquierda a derecha y almacene el número de bits establecidos de cada elemento en un vector.
- Nuestra tarea se reduce a encontrar la string más larga de los mismos elementos en este vector.
- Mantenga dos variables, current_count y max_count. Inicialice ambos con 1.
- Atraviese el vector y verifique si el elemento actual es el mismo que el elemento anterior. Si es igual, incremente current_count. Si no es lo mismo, reinicie current_count con 1.
- En cada paso, a max_count se le debe asignar el valor máximo entre max_count y current_count.
- El valor final de max_count es la respuesta.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to find the maximum number of // contiguous array elements with same // number of set bits #include <bits/stdc++.h> using namespace std; // Function to find maximum contiguous elements // with same set bits int sameSetBits(int arr[], int n) { vector<int> v; // Insert number of set bits in each element // of the array to the vector // __builtin_popcount() function returns the number // of set bits in an integer in C++ for (int i = 0; i < n; i++) v.push_back(__builtin_popcount(arr[i])); int current_count = 1, max_count = 1; // Finding the maximum number of same // contiguous elements for (int i = 1; i < v.size(); i++) { if (v[i + 1] == v[i]) current_count++; else current_count = 1; max_count = max(max_count, current_count); } // return answer return max_count; } // Driver code int main() { int arr[] = { 9, 75, 14, 7, 13, 11 }; int n = sizeof(arr) / sizeof(arr[0]); cout << sameSetBits(arr, n); return 0; }
Java
// Java program to find the maximum // number of contiguous array elements // with same number of set bits import java.io.*; import java.util.*; class GFG { // Function to find maximum contiguous // elements with same set bits static int sameSetBits(int arr[], int n) { Vector<Integer> v = new Vector<>(); // Insert number of set bits in each element // of the array to the vector for (int i = 0; i < n; i++) { int count = Integer.bitCount(arr[i]); v.add(count); } int current_count = 1, max_count = 1; // Finding the maximum number of same // contiguous elements for (int i = 1; i < v.size()-1; i++) { if (v.get(i + 1) == v.get(i)) current_count++; else current_count = 1; max_count = Math.max(max_count, current_count); } // return answer return max_count; } // Driver code public static void main (String[] args) { int arr[] = { 9, 75, 14, 7, 13, 11 }; int n = arr.length; System.out.println(sameSetBits(arr, n)); } } // This code is contributed by Archana_kumari
Python3
# Python 3 program to find the maximum # number of contiguous array elements # with same number of set bits # Function to find maximum contiguous # elements with same set bits def sameSetBits(arr, n): v = [] # Insert number of set bits in each # element of the array to the vector # function returns the number of set # bits in an integer for i in range(0, n, 1): v.append(bin(arr[i]).count('1')) current_count = 1 max_count = 1 # Finding the maximum number of same # contiguous elements for i in range(1, len(v) - 1, 1): if (v[i + 1] == v[i]): current_count += 1 else: current_count = 1 max_count = max(max_count, current_count) # return answer return max_count # Driver code if __name__ == '__main__': arr = [9, 75, 14, 7, 13, 11] n = len(arr) print(sameSetBits(arr, n)) # This code is contributed by # Surendra_Gangwar
C#
// C# program to find the maximum // number of contiguous array elements // with same number of set bits using System; using System.Collections.Generic; class GFG { // Function to find maximum contiguous // elements with same set bits static int sameSetBits(int []arr, int n) { List<int> v = new List<int>(); // Insert number of set bits in each element // of the array to the vector for (int i = 0; i < n; i++) { int count = Bitcount(arr[i]); v.Add(count); } int current_count = 1, max_count = 1; // Finding the maximum number of same // contiguous elements for (int i = 1; i < v.Count-1; i++) { if (v[i + 1] == v[i]) current_count++; else current_count = 1; max_count = Math.Max(max_count, current_count); } // return answer return max_count; } static int Bitcount(int n) { int count = 0; while (n != 0) { count++; n &= (n - 1); } return count; } // Driver code public static void Main (String[] args) { int []arr = { 9, 75, 14, 7, 13, 11 }; int n = arr.Length; Console.WriteLine(sameSetBits(arr, n)); } } // This code has been contributed by 29AjayKumar
Javascript
<script> // Javascript program to find the maximum number of // contiguous array elements with same // number of set bits function Bitcount(n) { var count = 0; while (n != 0) { count++; n &= (n - 1); } return count; } // Function to find maximum contiguous elements // with same set bits function sameSetBits(arr, n) { var v = []; // Insert number of set bits in each element // of the array to the vector // Bitcount function returns the number // of set bits in an integer in C++ for (var i = 0; i < n; i++) v.push(Bitcount(arr[i])); var current_count = 1, max_count = 1; // Finding the maximum number of same // contiguous elements for (var i = 1; i < v.length; i++) { if (v[i + 1] == v[i]) current_count++; else current_count = 1; max_count = Math.max(max_count, current_count); } // return answer return max_count; } // Driver code var arr = [ 9, 75, 14, 7, 13, 11 ]; var n = arr.length; document.write( sameSetBits(arr, n)); </script>
Producción:
4
Publicación traducida automáticamente
Artículo escrito por Shashank_Sharma y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA