Open In App

Minimum Subarray reversals to sort given Binary Array

Last Updated : 28 Jul, 2022
Summarize
Comments
Improve
Suggest changes
Share
1 Like
Like
Report

Given a binary array A[] of size N, the task is to find the minimum number of subarrays that need to be reversed to sort the binary array.

Examples:

Input: N = 4, A[]: {1, 0  , 0, 1}          
Output: 1
Explanation: Reverse the array from 0 to 2 to change the array to {0, 0, 1, 1}

Input: N = 4, A[]: {1, 0, 1  , 0}
Output: 2
Explanation: Reverse the array from 1 to 2 and then from 0 to 3

 

Approach: The idea to solve the problem is as follows:

To sort A[] iterate through the array and reverse every leftmost instance of a subarray of A[] with consecutive '1's and then consecutive '0's.

The count of all these subarrays can be found by counting the indices where A[i] = 1 and the next element i.e., A[i+1] = 0.

Follow the steps below to implement the idea:

  • Initialize a count variable with 0.  
  • Run a loop from 0 to N-2, and in each iteration do the following:
    • If the ith element is 1 and (i+1)th element is 0 increment count by one as there is a subarray of the type [. . .1100. . . ] that needs to be reversed to sort the array.
  • Return the count variable. 

Below is the implementation of the above approach.

C++
Java Python3 C# JavaScript

Output
2

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


Next Article

Similar Reads