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

• Difficulty Level : Basic
• Last Updated : 07 Mar, 2022

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, … arr}.
Second longest sequence of consecutive ones is 3 i.e {arr, … arr}.

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);` `    ``// 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)

My Personal Notes arrow_drop_up