Given an array of N including positive and negative numbers only. The task is to find the length of the longest alternating (means negative-positive-negative or positive-negative-positive) subarray present in the array.
Examples:
Input: a[] = {-5, -1, -1, 2, -2, -3}
Output: 3 
The subarray {-1, 2, -2} 
Input: a[] = {1, -5, 1, -5}
Output: 4 
Approach: The following steps are followed to solve the problem:
- Initially initialize cnt as 1.
 - Iterate among the array elements, and check if it has an alternate sign.
 - Increase the cnt by 1 if it has an alternate sign.
 - If it does not has an alternate sign, then re-initialize cnt by 1.
 
Below is the implementation of the above approach:
C++
// C++ program to find the longest alternating// subarray in an array of N number#include <bits/stdc++.h>using namespace std;// Function to find the longest subarrayint longestAlternatingSubarray(int a[], int n){    // Length of longest alternating    int longest = 1;    int cnt = 1;    // Iterate in the array    for (int i = 1; i < n; i++) {        // Check for alternate        if (a[i] * a[i - 1] < 0) {            cnt++;            longest = max(longest, cnt);        }        else            cnt = 1;    }    return longest;}/* Driver program to test above functions*/int main(){    int a[] = { -5, -1, -1, 2, -2, -3 };    int n = sizeof(a) / sizeof(a[0]);    // Function to find the longest subarray    cout << longestAlternatingSubarray(a, n);    return 0;} | 
Java
// Java program to find the longest alternating // subarray in an array of N numberclass GFG {    // Function to find the longest subarray     static int longestAlternatingSubarray(int a[], int n)     {         // Length of longest alternating         int longest = 1;         int cnt = 1;              // Iterate in the array         for (int i = 1; i < n; i++)         {                  // Check for alternate             if (a[i] * a[i - 1] < 0)            {                 cnt++;                 longest = Math.max(longest, cnt);             }             else                cnt = 1;         }         return longest;     }          /* Driver program to test above functions*/    public static void main (String[] args)    {         int a[] = { -5, -1, -1, 2, -2, -3 };         int n = a.length ;              // Function to find the longest subarray         System.out.println(longestAlternatingSubarray(a, n));    } }// This code is contributed by Ryuga | 
Python 3
# Python3 program to find the longest alternating # subarray in an array of N number # Function to find the longest subarray def longestAlternatingSubarray(a, n):         # Length of longest alternating     longest = 1    cnt = 1    # Iterate in the array    i = 1    while i < n:         # Check for alternate         if (a[i] * a[i - 1] < 0):            cnt = cnt + 1            longest = max(longest, cnt)                  else:            cnt = 1        i = i + 1         return longest # Driver Codea = [ -5, -1, -1, 2, -2, -3 ]n = len(a)# Function to find the longest subarray print(longestAlternatingSubarray(a, n))# This code is contributed # by shashank_sharma | 
C#
// C# program to find the longest alternating// subarray in an array of N numberusing System;class GFG{// Function to find the longest subarraystatic int longestAlternatingSubarray(int []a,                                       int n){    // Length of longest alternating    int longest = 1;    int cnt = 1;    // Iterate in the array    for (int i = 1; i < n; i++)     {        // Check for alternate        if (a[i] * a[i - 1] < 0)        {            cnt++;            longest = Math.Max(longest, cnt);        }        else            cnt = 1;    }    return longest;}// Driver Codepublic static void Main(){    int []a = { -5, -1, -1, 2, -2, -3 };    int n = a.Length;    // Function to find the longest subarray    Console.Write(longestAlternatingSubarray(a, n));}}// This code is contributed// by Akanksha Rai | 
PHP
<?php// PHP program to find the longest alternating// subarray in an array of N number// Function to find the longest subarrayfunction longestAlternatingSubarray($a, $n){         // Length of longest alternating    $longest = 1;    $cnt = 1;    // Iterate in the array    for ($i = 1; $i < $n; $i++)     {        // Check for alternate        if ($a[$i] * $a[$i - 1] < 0)         {            $cnt++;            $longest = max($longest, $cnt);        }        else            $cnt = 1;    }    return $longest;}// Driver Code$a = array(-5, -1, -1, 2, -2, -3 );$n = sizeof($a);// Function to find the longest subarrayecho longestAlternatingSubarray($a, $n);// This code is contributed by akt_mit?> | 
Javascript
<script>// JavaScript program to find the longest alternating // subarray in an array of N number // Function to find the longest subarray function longestAlternatingSubarray(a, n) {     // Length of longest alternating     let longest = 1;     let cnt = 1;     // Iterate in the array     for (let i = 1; i < n; i++) {         // Check for alternate         if (a[i] * a[i - 1] < 0) {             cnt++;             longest = Math.max(longest, cnt);         }         else            cnt = 1;     }     return longest; } /* Driver program to test above functions*/    let a = [ -5, -1, -1, 2, -2, -3 ];     let n = a.length;     // Function to find the longest subarray     document.write(longestAlternatingSubarray(a, n)); // This code is contributed by Surbhi Tyagi.</script> | 
3
Complexity Analysis:
- Time Complexity: O(N), as we are using a loop to traverse N times. Where N is the number of elements in the array.
 - Auxiliary Space: O(1), as we are not using any extra space.
 
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
