Dada una array binaria arr[] . La tarea es encontrar la posición de cualquier 0 en arr[] de modo que se maximice la distancia entre dos bits establecidos.
Ejemplos
Entrada: arr = [1, 0, 0, 0, 1, 0, 1]
Salida: 2
Explicación: cambiar el bit en arr[2]
Entrada: arr = [1, 0, 0, 0]
Salida: 3
Enfoque: el problema se puede resolver encontrando la distancia más larga entre bits de conjuntos adyacentes con alguna variación. Siga los pasos a continuación para resolver el problema dado.
- Para todas las distancias entre bits de conjuntos adyacentes, encuentre el máximo y almacene su mitad como una de las respuestas requeridas.
- Luego encuentre la distancia entre la distancia entre 0 y el primer bit establecido, y entre el índice N-1 y el último bit establecido.
- Encuentre el máximo general como la respuesta requerida.
- Imprime la respuesta encontrada al final.
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ program for above approach #include <bits/stdc++.h> using namespace std; // Function to find the maximum distance between any // two set bits after flipping one bit int maxDistToClosest1(vector<int>& arr) { // The size of the array int n = arr.size(), ans = 0; int temp = 1, setbit = 0; // Iterate through the array for (int i = 1; i < n; i++) { if (arr[i] == 1) { if (setbit == 0 && arr[0] == 0) ans = max(ans, temp); else ans = max(ans, temp / 2); setbit = 1; temp = 0; } temp++; } ans = arr[n - 1] == 0 ? max(temp - 1, ans) : max(temp / 2, ans); // Return the answer found return ans; } // Driver Code int main() { vector<int> arr = { 1, 0, 0, 0, 1, 0, 1 }; // Function Call cout << maxDistToClosest1(arr); return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // Function to find the maximum distance between any // two set bits after flipping one bit static int maxDistToClosest1(int arr[]) { // The size of the array int n = arr.length, ans = 0; int temp = 1, setbit = 0; // Iterate through the array for (int i = 1; i < n; i++) { if (arr[i] == 1) { if (setbit == 0 && arr[0] == 0) ans = Math.max(ans, temp); else ans = Math.max(ans, temp / 2); setbit = 1; temp = 0; } temp++; } ans = arr[n - 1] == 0 ? Math.max(temp - 1, ans) : Math.max(temp / 2, ans); // Return the answer found return ans; } // Driver Code public static void main (String[] args) { int arr[] = { 1, 0, 0, 0, 1, 0, 1 }; // Function Call System.out.print(maxDistToClosest1(arr)); } } // This code is contributed by hrithikgarg03188.
Python
# Pyhton program for above approach # Function to find the maximum distance between any # two set bits after flipping one bit def maxDistToClosest1(arr): # The size of the array n = len(arr) ans = 0 temp = 1 setbit = 0 # Iterate through the array for i in range(1, n): if (arr[i] == 1): if (setbit == 0 and arr[0] == 0): ans = max(ans, temp) else: ans = max(ans, temp // 2) setbit = 1 temp = 0 temp +=1 if(arr[n - 1] == 0): ans = max(temp - 1, ans) else: ans = max(temp // 2, ans) # Return the answer found return ans # Driver Code arr = [ 1, 0, 0, 0, 1, 0, 1 ] # Function Call print(maxDistToClosest1(arr)) # This code is contributed by Samim Hossain Mondal.
C#
// C# program for above approach using System; class GFG { // Function to find the maximum distance between any // two set bits after flipping one bit static int maxDistToClosest1(int[] arr) { // The size of the array int n = arr.Length, ans = 0; int temp = 1, setbit = 0; // Iterate through the array for (int i = 1; i < n; i++) { if (arr[i] == 1) { if (setbit == 0 && arr[0] == 0) ans = Math.Max(ans, temp); else ans = Math.Max(ans, temp / 2); setbit = 1; temp = 0; } temp++; } ans = arr[n - 1] == 0 ? Math.Max(temp - 1, ans) : Math.Max(temp / 2, ans); // Return the answer found return ans; } // Driver Code public static int Main() { int[] arr = { 1, 0, 0, 0, 1, 0, 1 }; // Function Call Console.Write(maxDistToClosest1(arr)); return 0; } } // This code is contributed by Taranpreet
Javascript
<script> // JavaScript program for above approach // Function to find the maximum distance between any // two set bits after flipping one bit const maxDistToClosest1 = (arr) => { // The size of the array let n = arr.length, ans = 0; let temp = 1, setbit = 0; // Iterate through the array for (let i = 1; i < n; i++) { if (arr[i] == 1) { if (setbit == 0 && arr[0] == 0) ans = Math.max(ans, temp); else ans = Math.max(ans, parseInt(temp / 2)); setbit = 1; temp = 0; } temp++; } ans = arr[n - 1] == 0 ? Math.max(temp - 1, ans) : Math.max(parseInt(temp / 2), ans); // Return the answer found return ans; } // Driver Code let arr = [1, 0, 0, 0, 1, 0, 1]; // Function Call document.write(maxDistToClosest1(arr)); // This code is contributed by rakeshsahni </script>
Producción
2
Complejidad temporal: O(N)
Espacio auxiliar: O(1)