# Length of second longest sequence of consecutive 1s in a binary array

Given a binary array arr[] of size N, the task is to find the length of the second longest sequence of consecutive 1s present in the array.

Examples:

Input: arr[] = {1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0}
Output: 4 3
Explanation:
Longest sequence of consecutive ones is 4 i.e {arr[7], … arr[10]}.
Second longest sequence of consecutive ones is 3 i.e {arr[0], … arr[2]}.

Input: arr[] = {1, 0, 1}
Output: 1 0

Approach: The idea is to traverse the given binary array and keep track of the largest and the second largest length of consecutive one’s encountered so far. Below are the steps:

1. Initialise variables maxi, count and second_max to store the length of the longest, current and second longest sequence of consecutive 1s respectively..
2. Iterate over the given array twice.
3. First, traverse the array from left to right. For every 1 encountered, then increment count and compare it with maximum so far. If 0 is encountered, reset count as 0.
4. In the second traversal, find the required second longest count of consecutive 1’s following the above procedure.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the above approach``#include ``using` `namespace` `std;` `// Function to find maximum``// and second maximum length``void` `FindMax(``int` `arr[], ``int` `N)``{``    ``// Initialise maximum length``    ``int` `maxi = -1;` `    ``// Initialise second maximum length``    ``int` `maxi2 = -1;` `    ``// Initialise count``    ``int` `count = 0;` `    ``// Iterate over the array``    ``for` `(``int` `i = 0; i < N; ++i) {` `        ``// If sequence ends``        ``if` `(arr[i] == 0)` `            ``// Reset count``            ``count = 0;` `        ``// Otherwise``        ``else` `{` `            ``// Increase length``            ``// of current sequence``            ``count++;` `            ``// Update maximum``            ``maxi = max(maxi, count);``        ``}``    ``}` `    ``// Traverse the given array``    ``for` `(``int` `i = 0; i < N; i++) {` `        ``// If sequence continues``        ``if` `(arr[i] == 1) {` `            ``// Increase length``            ``// of current sequence``            ``count++;` `            ``// Update second max``            ``if` `(count > maxi2 && count < maxi) {``                ``maxi2 = count;``            ``}``        ``}` `        ``// Reset count when 0 is found``        ``if` `(arr[i] == 0)``            ``count = 0;``    ``}` `    ``maxi = max(maxi, 0);``    ``maxi2 = max(maxi2, 0);` `    ``// Print the result``    ``cout << maxi2;``}` `// Driver Code``int` `main()``{``    ``// Given array``    ``int` `arr[] = { 1, 1, 1, 0, 0, 1, 1 };``    ``int` `N = ``sizeof``(arr) / ``sizeof``(arr[0]);` `    ``// Function Call``    ``FindMax(arr, N);``    ``return` `0;``}`

## Java

 `// Java implementation of the above approach``import` `java.io.*; ``import` `java.util.*; ` `class` `GFG{ ``    ` `// Function to find maximum``// and second maximum length``static` `void` `FindMax(``int` `arr[], ``int` `N)``{``    ` `    ``// Initialise maximum length``    ``int` `maxi = -``1``;` `    ``// Initialise second maximum length``    ``int` `maxi2 = -``1``;` `    ``// Initialise count``    ``int` `count = ``0``;` `    ``// Iterate over the array``    ``for``(``int` `i = ``0``; i < N; ++i)``    ``{``        ` `        ``// If sequence ends``        ``if` `(arr[i] == ``0``)` `            ``// Reset count``            ``count = ``0``;` `        ``// Otherwise``        ``else``        ``{``            ` `            ``// Increase length``            ``// of current sequence``            ``count++;` `            ``// Update maximum``            ``maxi = Math.max(maxi, count);``        ``}``    ``}` `    ``// Traverse the given array``    ``for``(``int` `i = ``0``; i < N; i++) ``    ``{``        ` `        ``// If sequence continues``        ``if` `(arr[i] == ``1``)``        ``{``            ` `            ``// Increase length``            ``// of current sequence``            ``count++;` `            ``// Update second max``            ``if` `(count > maxi2 && ``                ``count < maxi) ``            ``{``                ``maxi2 = count;``            ``}``        ``}``        ` `        ``// Reset count when 0 is found``        ``if` `(arr[i] == ``0``)``            ``count = ``0``;``    ``}` `    ``maxi = Math.max(maxi, ``0``);``    ``maxi2 = Math.max(maxi2, ``0``);` `    ``// Print the result``    ``System.out.println( maxi2);``}` `// Driver code ``public` `static` `void` `main(String[] args) ``{ ``    ``int` `arr[] = { ``1``, ``1``, ``1``, ``0``, ``0``, ``1``, ``1` `};``    ``int` `n = arr.length; ``    ` `    ``FindMax(arr, n);``} ``} ` `// This code is contributed by Stream_Cipher`

## Python3

 `# Python3 implementation of the above approach` `# Function to find maximum``# and second maximum length``def` `FindMax(arr, N):``  ` `    ``# Initialise maximum length``    ``maxi ``=` `-``1` `    ``# Initialise second maximum length``    ``maxi2 ``=` `-``1` `    ``# Initialise count``    ``count ``=` `0` `    ``# Iterate over the array``    ``for` `i ``in` `range``(N):` `        ``# If sequence ends``        ``if` `(arr[i] ``=``=` `0``):` `            ``# Reset count``            ``count ``=` `0` `        ``# Otherwise``        ``else``:` `            ``# Increase length``            ``# of current sequence``            ``count ``+``=` `1` `            ``# Update maximum``            ``maxi ``=` `max``(maxi, count)` `    ``# Traverse the given array``    ``for` `i ``in` `range``(N):` `        ``# If sequence continues``        ``if` `(arr[i] ``=``=` `1``):` `            ``# Increase length``            ``# of current sequence``            ``count ``+``=` `1` `            ``# Update second max``            ``if` `(count > maxi2 ``and``                ``count < maxi):``                ``maxi2 ``=` `count` `        ``# Reset count when 0 is found``        ``if` `(arr[i] ``=``=` `0``):``            ``count ``=` `0` `    ``maxi ``=` `max``(maxi, ``0``)``    ``maxi2 ``=` `max``(maxi2, ``0``)` `    ``# Print the result``    ``print``(maxi2)` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``  ` `    ``# Given array``    ``arr ``=` `[``1``, ``1``, ``1``, ``0``, ``0``, ``1``, ``1``]``    ``N ``=` `len``(arr)` `    ``# Function Call``    ``FindMax(arr, N)` `# This code is contributed by Mohit Kumar29`

## C#

 `// C# implementation of the above approach``using` `System.Collections.Generic; ``using` `System; ` `class` `GFG{ ``    ` `// Function to find maximum``// and second maximum length``static` `void` `FindMax(``int` `[]arr, ``int` `N)``{``    ` `    ``// Initialise maximum length``    ``int` `maxi = -1;` `    ``// Initialise second maximum length``    ``int` `maxi2 = -1;` `    ``// Initialise count``    ``int` `count = 0;` `    ``// Iterate over the array``    ``for``(``int` `i = 0; i < N; ++i)``    ``{``        ` `        ``// If sequence ends``        ``if` `(arr[i] == 0)` `            ``// Reset count``            ``count = 0;` `        ``// Otherwise``        ``else``        ``{``            ` `            ``// Increase length``            ``// of current sequence``            ``count++;` `            ``// Update maximum``            ``maxi = Math.Max(maxi, count);``        ``}``    ``}``    ` `    ``// Traverse the given array``    ``for``(``int` `i = 0; i < N; i++) ``    ``{` `        ``// If sequence continues``        ``if` `(arr[i] == 1)``        ``{``            ` `            ``// Increase length``            ``// of current sequence``            ``count++;` `            ``// Update second max``            ``if` `(count > maxi2 && ``                ``count < maxi) ``            ``{``                ``maxi2 = count;``            ``}``        ``}``        ` `        ``// Reset count when 0 is found``        ``if` `(arr[i] == 0)``            ``count = 0;``    ``}``    ` `    ``maxi = Math.Max(maxi, 0);``    ``maxi2 = Math.Max(maxi2, 0);` `    ``// Print the result``    ``Console.WriteLine( maxi2);``}` `// Driver code ``public` `static` `void` `Main() ``{ ``    ``int` `[]arr = { 1, 1, 1, 0, 0, 1, 1 };``    ``int` `n = arr.Length; ``    ` `    ``FindMax(arr, n);``} ``} ` `// This code is contributed by Stream_Cipher`

## Javascript

 ``

Output:
`2`

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

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 geeks!

Previous
Next