📜  二进制数组中要替换的最小1数

📅  最后修改于: 2021-05-06 23:41:57             🧑  作者: Mango

给定一个二进制数组arr [],其值为零和一。任务是找到要更改为零的最小位数,例如如果存在任何索引i在数组中使arr [i] = 0,则arr [i-1]和arr [i + 1]都不应该等于1同时。

也就是说,对于任何索引i以下条件应失败:

if (arr[i]== 0):
    (arr[i-1] == 1) && (arr[i+1] == 1)

注意:数组考虑从1开始的索引。

例子

方法:想法是,只要我们发现类似arr[i-1] = 1 \;and\; arr[i] = 0 \;and \;arr[i+1] = 1我们只是将第(i + 1)个索引的值更改为零(0)。因此,第(i-1)个索引与第(i + 1)个索引之间的索引是安全的。

下面是上述方法的实现:

C++
// C++ program to find minimum number
// of 1's  to be replaced to 0's
#include 
using namespace std;
  
// Function to find minimum number
// of 1's  to be replaced to 0's
int minChanges(int A[], int n)
{
    int cnt = 0;
  
    for (int i = 0; i < n - 2; ++i) {
  
        if ((i - 1 >= 0) && A[i - 1] == 1
            && A[i + 1] == 1 && A[i] == 0) {
            A[i + 1] = 0;
            cnt++;
        }
  
    }
  
    // return final answer
    return cnt;
}
  
// Driver program
int main()
{
    int A[] = { 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 };
    int n = sizeof(A) / sizeof(A[0]);
  
    cout << minChanges(A, n);
  
    return 0;
}


Java
// Java program to find minimum number
// of 1's to be replaced to 0's
import java.lang.*;
import java.util.*;
  
class GFG
{
// Function to find minimum number
// of 1's to be replaced to 0's
static int minChanges(int[] A, int n)
{
    int cnt = 0;
  
    for (int i = 0; i < n - 2; ++i)
    {
  
        if ((i - 1 >= 0) && A[i - 1] == 1 && 
                            A[i + 1] == 1 && 
                            A[i] == 0) 
        {
            A[i + 1] = 0;
            cnt++;
        }
  
    }
  
    // return final answer
    return cnt;
}
  
// Driver Code
public static void main(String args[])
{
    int[] A = { 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 };
    int n = A.length;
  
    System.out.print(minChanges(A, n));
}
}
  
// This code is contributed
// by Akanksha Rai


Python3
# Python 3 program to find minimum 
# number of 1's to be replaced to 0's
      
# Function to find minimum number
# of 1's to be replaced to 0's
def minChanges(A, n):
    cnt = 0
    for i in range(n - 2):
        if ((i - 1 >= 0) and A[i - 1] == 1 and 
           A[i + 1] == 1 and A[i] == 0):
            A[i + 1] = 0
            cnt = cnt + 1
      
    # return final answer
    return cnt
      
# Driver Code
A = [1, 1, 0, 1, 1, 0, 1, 0, 1, 0]
n = len(A)
print(minChanges(A, n))
          
# This code is contributed 
# by Shashank_Sharma


C#
// C# program to find minimum number
// of 1's to be replaced to 0's
using System;
  
class GFG
{
// Function to find minimum number
// of 1's to be replaced to 0's
static int minChanges(int[] A, int n)
{
    int cnt = 0;
  
    for (int i = 0; i < n - 2; ++i)
    {
  
        if ((i - 1 >= 0) && A[i - 1] == 1 && 
                            A[i + 1] == 1 && A[i] == 0) 
        {
            A[i + 1] = 0;
            cnt++;
        }
  
    }
  
    // return final answer
    return cnt;
}
  
// Driver Code
public static void Main()
{
    int[] A = { 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 };
    int n = A.Length;
  
    Console.Write(minChanges(A, n));
}
}
  
// This code is contributed
// by Akanksha Rai


PHP
= 0) && $A[$i - 1] == 1 &&
          $A[$i + 1] == 1 && $A[$i] == 0)
        {
            $A[$i + 1] = 0;
            $cnt++;
        }
  
    }
  
    // return final answer
    return $cnt;
}
  
// Driver Code
$A = array(1, 1, 0, 1, 1, 
           0, 1, 0, 1, 0);
$n = sizeof($A);
  
echo minChanges($A, $n);
  
// This code is contributed 
// by Ankita_Saini
?>


输出:
2

时间复杂度: O(N)