Dada una string binaria S de longitud N , tal que todos los 1 aparecen a la derecha. La tarea es devolver el índice del primer bit establecido encontrado desde el lado izquierdo; de lo contrario, devolver -1.
Ejemplos:
Entrada : s = 00011, N = 5
Salida: 3
Explicación : El primer bit establecido desde el lado izquierdo está en el índice 3.Entrada : s = 0000, N = 4
Salida : -1
Enfoque: este problema se puede resolver mediante la búsqueda binaria .
- Aplique la búsqueda binaria en el rango [1, N] para encontrar el primer bit establecido de la siguiente manera:
- Actualizar mid como (l+r)/2
- Si s[mid] está configurado como bit, actualice ans como mid y r como mid-1
- de lo contrario, actualice l como mid + 1
- Devuelve el último valor almacenado en ans .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ Program to find Position // Of leftmost set bit #include <iostream> using namespace std; // Function to find // A bit is set or not bool isSetBit(string& s, int i) { return s[i] == '1'; } // Function to find // First set bit int firstSetBit(string& s, int n) { long l = 0, r = n, m, ans = -1; // Applying binary search while (l <= r) { m = (l + r) / 2; if (isSetBit(s, m)) { // store the current // state of m in ans ans = m; r = m - 1; } else { l = m + 1; } } // Returning the position // of first set bit return ans; } // Driver code int main() { string s = "111"; int n = s.length(); cout << firstSetBit(s, n); return 0; }
Java
// Java program for the above approach class GFG { // Function to find // A bit is set or not static boolean isSetBit(String s, int i) { return s.charAt(i) == '1' ? true : false; } // Function to find // First set bit static int firstSetBit(String s, int n) { int l = 0, r = n, m, ans = -1; // Applying binary search while (l <= r) { m = (l + r) / 2; if (isSetBit(s, m)) { // store the current // state of m in ans ans = m; r = m - 1; } else { l = m + 1; } } // Returning the position // of first set bit return ans; } // Driver Code public static void main(String args[]) { String s = "111"; int n = s.length(); System.out.print(firstSetBit(s, n)); } } // This code is contributed by gfgking
C#
// C# program for the above approach using System; using System.Collections.Generic; class GFG { // Function to find // A bit is set or not static bool isSetBit(string s, int i) { return s[i] == '1'; } // Function to find // First set bit static int firstSetBit(string s, int n) { int l = 0, r = n, m, ans = -1; // Applying binary search while (l <= r) { m = (l + r) / 2; if (isSetBit(s, m)) { // store the current // state of m in ans ans = m; r = m - 1; } else { l = m + 1; } } // Returning the position // of first set bit return ans; } // Driver Code public static void Main() { string s = "111"; int n = s.Length; Console.Write(firstSetBit(s, n)); } } // This code is contributed by sanjoy_62.
Javascript
<script> // JavaScript code for the above approach // Function to find // A bit is set or not function isSetBit(s, i) { return s[i] == '1'; } // Function to find // First set bit function firstSetBit(s, n) { let l = 0, r = n, m, ans = -1; // Applying binary search while (l <= r) { m = Math.floor((l + r) / 2); if (isSetBit(s, m)) { // store the current // state of m in ans ans = m; r = m - 1; } else { l = m + 1; } } // Returning the position // of first set bit return ans; } // Driver code let s = "111"; let n = s.length; document.write(firstSetBit(s, n)); // This code is contributed by Potta Lokesh </script>
Python
# Python Program to find Position # Of leftmost set bit # Function to find # A bit is set or not def isSetBit(s, i): return s[i] == '1' # Function to find # First set bit def firstSetBit(s, n): l = 0 r = n m = 0 ans = -1 # Applying binary search while (l <= r): m = (l + r) // 2 if (isSetBit(s, m)): # store the current # state of m in ans ans = m r = m - 1 else: l = m + 1 # Returning the position # of first set bit return ans # Driver code s = "111" n = len(s) print(firstSetBit(s, n)) # This code is contributed by Samim Hossain Mondal.
Producción:
0
Complejidad de Tiempo: O(LogN)
Espacio Auxiliar: o(1)