# Count minimum right flips to set all values in an array

• Difficulty Level : Medium
• Last Updated : 01 Nov, 2022

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: A[] = [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: A[] = [1 0 0 0 0]
Output: 1

Recommended Practice

Naive Approach:

Keep a count variable and Iterate from 0 to N-1 and check for every i if A[i] is 0 increment count by 1 and switch all values from i to N-1 as 0 to 1 or 1 to 0

Below is the Implementation of above Idea:

## C++

 `// C++ code for the Idea``// turn all bulbs on.` `#include ``using` `namespace` `std;` `int` `bulbs(``int` `A[], ``int` `N)``{` `    ``// To keep track of switch presses so far``    ``int` `count = 0;` `    ``for` `(``int` `i = 0; i < N; i++) {``        ``if` `(A[i] == 0) {``            ``A[i] = 1;``            ``for` `(``int` `j = i + 1; j < N; j++) {``                ``if` `(A[j] == 1)``                    ``A[j] = 0;``                ``else``                    ``A[j] = 1;``            ``}``            ``count++;``        ``}``    ``}``    ``return` `count;``}` `// Driver code``int` `main()``{` `    ``int` `states[] = { 0, 1, 0, 1 };``    ``int` `N = ``sizeof``(states) / ``sizeof``(states[0]);` `    ``// Function Code``    ``cout << ``"The minimum number of switches needed are "``         ``<< bulbs(states, N);``}`

## Java

 `// Java code for the Idea turn all bulbs on.` `import` `java.io.*;` `class` `GFG {` `    ``static` `int` `bulbs(``int``[] A, ``int` `N)``    ``{``        ``// To keep track of switch presses so far``        ``int` `count = ``0``;``        ``for` `(``int` `i = ``0``; i < N; i++) {``            ``if` `(A[i] == ``0``) {``                ``A[i] = ``1``;``                ``for` `(``int` `j = i + ``1``; j < N; j++) {``                    ``if` `(A[j] == ``1``) {``                        ``A[j] = ``0``;``                    ``}``                    ``else` `{``                        ``A[j] = ``1``;``                    ``}``                ``}``                ``count++;``            ``}``        ``}``        ``return` `count;``    ``}` `    ``public` `static` `void` `main(String[] args)``    ``{``        ``int``[] states = { ``0``, ``1``, ``0``, ``1` `};``        ``int` `N = states.length;` `        ``// Function Code``        ``System.out.print(``            ``"The minimum number of switches needed are "``            ``+ bulbs(states, N));``    ``}``}` `// This code is contributed by lokeshmvs21.`

## Python3

 `class` `GFG :``    ``@staticmethod``    ``def`  `bulbs( A,  N) :``      ` `        ``# To keep track of switch presses so far``        ``count ``=` `0``        ``i ``=` `0``        ``while` `(i < N) :``            ``if` `(A[i] ``=``=` `0``) :``                ``A[i] ``=` `1``                ``j ``=` `i ``+` `1``                ``while` `(j < N) :``                    ``if` `(A[j] ``=``=` `1``) :``                        ``A[j] ``=` `0``                    ``else` `:``                        ``A[j] ``=` `1``                    ``j ``+``=` `1``                ``count ``+``=` `1``            ``i ``+``=` `1``        ``return` `count``    ``@staticmethod``    ``def` `main( args) :``        ``states ``=` `[``0``, ``1``, ``0``, ``1``]``        ``N ``=` `len``(states)``        ` `        ``# Function Code``        ``print``(``"The minimum number of switches needed are "` `+` `str``(GFG.bulbs(states, N)), end ``=``"")``    ` `if` `__name__``=``=``"__main__"``:``    ``GFG.main([])``    ` `    ``# This code is contributed by aaityaburujwale.`

## C#

 `// C# code for the Idea turn all bulbs on.``using` `System;``public` `class` `GFG {` `  ``static` `int` `bulbs(``int``[] A, ``int` `N)``  ``{` `    ``// To keep track of switch presses so far``    ``int` `count = 0;``    ``for` `(``int` `i = 0; i < N; i++) {``      ``if` `(A[i] == 0) {``        ``A[i] = 1;``        ``for` `(``int` `j = i + 1; j < N; j++) {``          ``if` `(A[j] == 1) {``            ``A[j] = 0;``          ``}``          ``else` `{``            ``A[j] = 1;``          ``}``        ``}``        ``count++;``      ``}``    ``}``    ``return` `count;``  ``}` `  ``static` `public` `void` `Main()``  ``{` `    ``// Code``    ``int``[] states = { 0, 1, 0, 1 };``    ``int` `N = states.Length;` `    ``// Function Code``    ``Console.Write(``      ``"The minimum number of switches needed are "``      ``+ bulbs(states, N));``  ``}``}` `// This code is contributed by lokeshmvs21.`

## Javascript

 `// Javascript code for the Idea``// turn all bulbs on.``function` `bulbs(A, N)``{` `    ``// To keep track of switch presses so far``    ``let count = 0;` `    ``for` `(let i = 0; i < N; i++) {``        ``if` `(A[i] == 0) {``            ``A[i] = 1;``            ``for` `(let j = i + 1; j < N; j++) {``                ``if` `(A[j] == 1)``                    ``A[j] = 0;``                ``else``                    ``A[j] = 1;``            ``}``            ``count++;``        ``}``    ``}``    ``return` `count;``}` `// Driver code``let states = [ 0, 1, 0, 1 ];``let N = 4;` `// Function Code``document.write(``"The minimum number of switches needed are "``               ``+ bulbs(states, N));``               ` `// This code is contributed by garg28harsh.`

Output

`The minimum number of switches needed are 4`

Time Complexity: O(N2).
Auxiliary Space: O(1).

Efficient Approach:

Traverse given array from left to right and keep pressing switch for off bulbs. Keep track of the number of switch presses so far. If the number of presses are even, 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.

Below is the Implementation Of above Idea:

## C++

 `// CPP program to find number switch presses to``// turn all bulbs on.` `#include``using` `namespace` `std;` `int` `bulbs(``int` `a[],``int` `n)``{``    ``// To keep track of switch presses so far``    ``int` `count = 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)``        ``{``            ``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)``        ``{``            ``count++;``        ``}``    ``}``    ``return` `count;``}` `// Driver code``int` `main()``{``    ``int` `states[] = {0,1,0,1};``    ``int` `n = ``sizeof``(states)/``sizeof``(states[0]);``  ` `      ``// Function Code``    ``cout << ``"The minimum number of switches needed are "` `<< bulbs(states,n);``}`

## Java

 `// Java program to find number switch presses to``// turn all bulbs on.``import` `java.util.*;` `public` `class` `GFG``{``    ``public` `int` `bulbs(ArrayList a)``    ``{``        ``// To keep track of switch presses so far``        ``int` `count = ``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``)``            ``{``                ``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``)``            ``{``                ``count++;``            ``}``        ``}``        ``return` `count;``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``GFG gfg = ``new` `GFG();` `        ``ArrayList states = ``new` `ArrayList();` `        ``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));``    ``}``}`

## Python3

 `# 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``    ``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``):``            ``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``):``            ``count ``+``=` `1``    ``return` `count`  `# Driver code``states ``=` `[``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#

 `// 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;``  ` `    ``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)``        ``{``            ``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)``        ``{``            ``count++;``        ``}``    ``}``    ``return` `count;``}` `// Driver code``public` `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`

## Javascript

 ``

Output

`The minimum number of switches needed are 4`

Time Complexity: O(n)
Auxiliary Space: O(1)

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.