Minimum number of 1’s to be replaced in a binary array

• Difficulty Level : Medium
• Last Updated : 18 May, 2021

Given a binary array arr[] of zero’s and one’s only. The task is to find the minimum number of one’s to be changed to zero such if there exist any index in the array such that arr[i] = 0 then arr[i-1] and arr[i+1] both should not be equals to at the same time.
That is, for any index the below condition should fail:

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

Note: 1-based indexing is considered for the array.
Examples

Input : arr[] = { 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 }
Output : 2
Explanation: Indexs 2 and 7 OR 4 and 7 can be changed to zero.
Input : arr[] = { 1, 1, 0, 0, 0 }
Output : 0

Approach: The idea is that, whenever we found condition like we simply changed the value of (i+1)th index to zero(0). So that index between (i-1)-th and (i+1)-th index is safe.
Below is the implementation of the above approach:

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'sint 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 programint main(){    int A[] = { 1, 1, 0, 1, 1, 0, 1, 0, 1, 0 };    int n = sizeof(A) / sizeof(A);     cout << minChanges(A, n);     return 0;}

Java

 // Java program to find minimum number// of 1's to be replaced to 0'simport java.lang.*;import java.util.*; class GFG{// Function to find minimum number// of 1's to be replaced to 0'sstatic 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 Codepublic 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'sdef 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 CodeA = [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'susing System; class GFG{// Function to find minimum number// of 1's to be replaced to 0'sstatic 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 Codepublic 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?>

Javascript


Output:
2

Time Complexity: O(N)

My Personal Notes arrow_drop_up