Count minimum right flips to set all values in an array - GeeksforGeeks

20 Jul, 2021
N light bulbs are connected by a wire. Each bulb has a switch associated with it, however due to faulty wiring, a switch also changes the state of all the bulbs to the right of current bulb. Given an initial state of all bulbs, find the minimum number of switches you have to press to turn on all the bulbs. You can press the same switch multiple times. Note: 0 represents the bulb is off and 1 represents the bulb is on. Examples:  
Input :  [0 1 0 1]
Output : 4
Explanation :
    press switch 0 : [1 0 1 0]
    press switch 1 : [1 1 0 1]
    press switch 2 : [1 1 1 0]
    press switch 3 : [1 1 1 1]

Input : [1 0 0 0 0] 
Output : 1
 
We traverse given array from left to right and keep pressing switch for off bulbs. We keep track of the number of switch presses so far. If the number of presses are odd, that means the current switch is in its original state else it is in the other state. Depending on what state the bulb is in, we can increment the count of the number of presses.  
C++
Java
Python3
C#
Javascript
// CPP program to find number switch presses to// turn all bulbs on.#include<bits/stdc++.h>using namespace std; int bulbs(int a[],int n){    // To keep track of switch presses so far    int count = 0;     int res = 0;    for (int i = 0; i < n; i++)    {        /* if the bulb's original state is on and count        is even, it is currently on...*/        /* no need to press this switch */        if (a[i] == 1 && count % 2 == 0)            continue;         /* If the bulb's original state is off and count        is odd, it is currently on...*/        /* no need to press this switch */        else if(a[i] == 0 && count % 2 != 0)            continue;         /* if the bulb's original state is on and count           is odd, it is currently off...*/        /* Press this switch to on the bulb and increase        the count */        else if (a[i] == 1 && count % 2 != 0)        {            res++;            count++;        }                 /* if the bulb's original state is off and        count is even, it is currently off...*/        /* press this switch to on the bulb and        increase the count */        else if (a[i] == 0 && count % 2 == 0)        {            res++;            count++;        }    }    return res;} // Driver codeint main(){    int states[] = {0,1,0,1};    int n = sizeof(states)/sizeof(states[0]);    cout << "The minimum number of switches needed are " << bulbs(states,n);} // This code is contributed by// Sanjit_Prasad
// Java program to find number switch presses to// turn all bulbs on.import java.util.*; public class GFG{    public int bulbs(ArrayList<Integer> a)    {        // To keep track of switch presses so far        int count = 0;         int res = 0;        for (int i = 0; i < a.size(); i++)        {            /* if the bulb's original state is on and count               is even, it is currently on...*/            /* no need to press this switch */            if (a.get(i) == 1 && count%2 == 0)                continue;             /* If the bulb's original state is off and count               is odd, it is currently on...*/            /* no need to press this switch */            else if(a.get(i) == 0 && count%2 != 0)                continue;             /* if the bulb's original state is on and count               is odd, it is currently off...*/            /* Press this switch to on the bulb and increase               the count */            else if (a.get(i) == 1 && count%2 != 0)            {                res++;                count++;            }             /* if the bulb's original state is off and               count is even, it is currently off...*/            /* press this switch to on the bulb and               increase the count */            else if (a.get(i) == 0 && count%2 == 0)            {                res++;                count++;            }        }        return res;    }     // Driver code    public static void main(String[] args)    {        GFG gfg = new GFG();         ArrayList<Integer> states = new ArrayList<Integer>();         states.add(0);        states.add(1);        states.add(0);        states.add(1);         System.out.println("The minimum number of switches" +                           " needed are " + gfg.bulbs(states));    }}
# Python program to find number switch presses to# turn all bulbs on.  def bulbs(a, n):    # To keep track of switch presses so far    count = 0     res = 0    for i in range(n):        # if the bulb's original state is on and count        # is even, it is currently on...        # no need to press this switch        if (a[i] == 1 and count % 2 == 0):            continue         # If the bulb's original state is off and count        # is odd, it is currently on...        # no need to press this switch        elif(a[i] == 0 and count % 2 != 0):            continue         # if the bulb's original state is on and count        # is odd, it is currently off...        # Press this switch to on the bulb and increase        # the count        elif (a[i] == 1 and count % 2 != 0):            res += 1            count += 1         # if the bulb's original state is off and        # count is even, it is currently off...        # press this switch to on the bulb and        # increase the count        elif (a[i] == 0 and count % 2 == 0):            res += 1            count += 1    return res  # Driver codestates = [0, 1, 0, 1]n = len(states)print("The minimum number of switches needed are", bulbs(states, n)) # This code is contributed by ankush_953
// C# program to find number switch presses// to turn all bulbs on.using System;using System.Collections.Generic; class GFG{public virtual int bulbs(List<int> a){    // To keep track of switch presses so far    int count = 0;     int res = 0;    for (int i = 0; i < a.Count; i++)    {        /* if the bulb's original state is on        and count is even, it is currently on...*/        /* no need to press this switch */        if (a[i] == 1 && count % 2 == 0)        {            continue;        }         /* If the bulb's original state is off        and count is odd, it is currently on...*/        /* no need to press this switch */        else if (a[i] == 0 && count % 2 != 0)        {            continue;        }         /* if the bulb's original state is on        and count is odd, it is currently off...*/        /* Press this switch to on the bulb and        increase the count */        else if (a[i] == 1 && count % 2 != 0)        {            res++;            count++;        }         /* if the bulb's original state is off and        count is even, it is currently off...*/        /* press this switch to on the bulb and        increase the count */        else if (a[i] == 0 && count % 2 == 0)        {            res++;            count++;        }    }    return res;} // Driver codepublic static void Main(string[] args){    GFG gfg = new GFG();     List<int> states = new List<int>();     states.Add(0);    states.Add(1);    states.Add(0);    states.Add(1);     Console.WriteLine("The minimum number of switches" +                    " needed are " + gfg.bulbs(states));}} // This code is contributed by Shrikant13
<script>// javascript program to find number switch presses to// turn all bulbs on.function bulbs(a, n){     // To keep track of switch presses so far    let count = 0;     let res = 0;    for (let i = 0; i < n; i++)    {        /* if the bulb's original state is on and count        is even, it is currently on...*/        /* no need to press this switch */        if (a[i] == 1 && count % 2 == 0)            continue;         /* If the bulb's original state is off and count        is odd, it is currently on...*/        /* no need to press this switch */        else if(a[i] == 0 && count % 2 != 0)            continue;         /* if the bulb's original state is on and count           is odd, it is currently off...*/        /* Press this switch to on the bulb and increase        the count */        else if (a[i] == 1 && count % 2 != 0)        {            res++;            count++;        }                 /* if the bulb's original state is off and        count is even, it is currently off...*/        /* press this switch to on the bulb and        increase the count */        else if (a[i] == 0 && count % 2 == 0)        {            res++;            count++;        }    }    return res;} // Driver code     let states = [0,1,0,1];    let n = states.length;    document.write("The minimum number of switches needed are " + bulbs(states,n));         // This code is contributed by vaibhavrabadiya117.</script>
Output:  
The minimum number of switches needed are 4.
This article is contributed by Saloni Baweja. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks. https://www.interviewbit.com/problems/bulbs/Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
shrikanth13
Sanjit_Prasad
ankush_953
vaibhavrabadiya117
binary-string
Arrays
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Stack Data Structure (Introduction and Program)
Top 50 Array Coding Problems for Interviews
Introduction to Arrays
Multidimensional Arrays in Java
Linear Search
Linked List vs Array
Python | Using 2D arrays/lists the right way
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Maximum and minimum of an array using minimum number of comparisons
Queue | Set 1 (Introduction and Array Implementation)