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!
