Encuentre el índice en el que se debe establecer el bit para maximizar la distancia entre el siguiente bit establecido

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)

Publicación traducida automáticamente

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