Longest increasing subarray

19 Jan, 2022
Given an array containing n numbers. The problem is to find the length of the longest contiguous subarray such that every element in the subarray is strictly greater than its previous element in the same subarray. Time Complexity should be O(n).
Examples:  
Input : arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2}
Output : 5
The subarray is {3, 5, 7, 8, 9}

Input : arr[] = {12, 13, 1, 5, 4, 7, 8, 10, 10, 11}
Output : 4
The subarray is {4, 7, 8, 10} 
Algorithm:  
lenOfLongIncSubArr(arr, n)
    Declare max = 1, len = 1
    for i = 1 to n-1
    if arr[i] > arr[i-1]
        len++
    else
        if max < len
            max = len
        len = 1
    if max < len
        max = len
    return max 
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation to find the length of// longest increasing contiguous subarray#include <bits/stdc++.h> using namespace std; // function to find the length of longest increasing// contiguous subarrayint lenOfLongIncSubArr(int arr[], int n){    // 'max' to store the length of longest    // increasing subarray    // 'len' to store the lengths of longest    // increasing subarray at different    // instants of time    int max = 1, len = 1;         // traverse the array from the 2nd element    for (int i=1; i<n; i++)    {        // if current element if greater than previous        // element, then this element helps in building        // up the previous increasing subarray encountered        // so far        if (arr[i] > arr[i-1])            len++;        else        {            // check if 'max' length is less than the length            // of the current increasing subarray. If true,            // then update 'max'            if (max < len)                   max = len;                             // reset 'len' to 1 as from this element            // again the length of the new increasing            // subarray is being calculated               len = 1;           }       }         // comparing the length of the last    // increasing subarray with 'max'    if (max < len)        max = len;         // required maximum length    return max;} // Driver program to test aboveint main(){    int arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2};    int n = sizeof(arr) / sizeof(arr[0]);    cout << "Length = "         << lenOfLongIncSubArr(arr, n);    return 0;    }
// JAVA Code to find length of// Longest increasing subarrayimport java.util.*; class GFG {         // function to find the length of longest    // increasing contiguous subarray    public static int lenOfLongIncSubArr(int arr[],                                            int n)    {        // 'max' to store the length of longest        // increasing subarray        // 'len' to store the lengths of longest        // increasing subarray at different        // instants of time        int max = 1, len = 1;                  // traverse the array from the 2nd element        for (int i=1; i<n; i++)        {            // if current element if greater than            // previous element, then this element            // helps in building up the previous            // increasing subarray encountered            // so far            if (arr[i] > arr[i-1])                len++;            else            {                // check if 'max' length is less                // than the length of the current                // increasing subarray. If true,                // than update 'max'                if (max < len)                       max = len;                                      // reset 'len' to 1 as from this                // element again the length of the                // new increasing subarray is being                // calculated                   len = 1;               }           }                  // comparing the length of the last        // increasing subarray with 'max'        if (max < len)            max = len;                  // required maximum length        return max;    }         /* Driver program to test above function */    public static void main(String[] args)    {         int arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2};            int n = arr.length;            System.out.println("Length = " +                      lenOfLongIncSubArr(arr, n));                 }    }   // This code is contributed by Arnav Kr. Mandal.
# Python 3 implementation to find the length of# longest increasing contiguous subarray   # function to find the length of longest# increasing contiguous subarraydef lenOfLongIncSubArr(arr, n) :     # 'max' to store the length of longest    # increasing subarray    # 'len' to store the lengths of longest    # increasing subarray at different    # instants of time    m = 1    l = 1          # traverse the array from the 2nd element    for i in range(1, n) :         # if current element if greater than previous        # element, then this element helps in building        # up the previous increasing subarray encountered        # so far        if (arr[i] > arr[i-1]) :            l =l + 1        else :             # check if 'max' length is less than the length            # of the current increasing subarray. If true,            # then update 'max'            if (m < l)  :                m = l             # reset 'len' to 1 as from this element            # again the length of the new increasing            # subarray is being calculated               l = 1                      # comparing the length of the last    # increasing subarray with 'max'    if (m < l) :        m = l          # required maximum length    return m # Driver program to test above arr = [5, 6, 3, 5, 7, 8, 9, 1, 2]n = len(arr)print("Length = ", lenOfLongIncSubArr(arr, n))  # This code is contributed# by Nikita Tiwari.
// C# Code to find length of// Longest increasing subarrayusing System; class GFG {     // function to find the length of longest    // increasing contiguous subarray    public static int lenOfLongIncSubArr(int[] arr,                                             int n)    {        // 'max' to store the length of longest        // increasing subarray        // 'len' to store the lengths of longest        // increasing subarray at different        // instants of time        int max = 1, len = 1;         // traverse the array from the 2nd element        for (int i = 1; i < n; i++) {                         // if current element if greater than            // previous element, then this element            // helps in building up the previous            // increasing subarray encountered            // so far            if (arr[i] > arr[i - 1])                len++;            else {                                 // check if 'max' length is less                // than the length of the current                // increasing subarray. If true,                // than update 'max'                if (max < len)                    max = len;                 // reset 'len' to 1 as from this                // element again the length of the                // new increasing subarray is being                // calculated                len = 1;            }        }         // comparing the length of the last        // increasing subarray with 'max'        if (max < len)            max = len;         // required maximum length        return max;    }     /* Driver program to test above function */    public static void Main()    {        int[] arr = { 5, 6, 3, 5, 7, 8, 9, 1, 2 };        int n = arr.Length;        Console.WriteLine("Length = " +                           lenOfLongIncSubArr(arr, n));    }} // This code is contributed by Sam007
<?php// PHP implementation to find the length of// longest increasing contiguous subarray // function to find the length of// longest increasing contiguous// subarrayfunction lenOfLongIncSubArr($arr, $n){         // 'max' to store the length of longest    // increasing subarray    // 'len' to store the lengths of longest    // increasing subarray at different    // instants of time    $max = 1;    $len = 1;         // traverse the array from    // the 2nd element    for ($i = 1; $i < $n; $i++)    {                 // if current element if        // greater than previous        // element, then this element        // helps in building up the        // previous increasing subarray        // encountered so far        if ($arr[$i] > $arr[$i-1])            $len++;        else        {                         // check if 'max' length is            // less than the length            // of the current increasing            // subarray. If true,            // then update 'max'            if ($max < $len)                $max = $len;                             // reset 'len' to 1 as            // from this element            // again the length of            // the new increasing            // subarray is being            // calculated            $len = 1;        }    }         // comparing the length of the last    // increasing subarray with 'max'    if ($max < $len)        $max = $len;         // required maximum length    return $max;}     // Driver Code    $arr = array(5, 6, 3, 5, 7, 8, 9, 1, 2);    $n = sizeof($arr);    echo "Length = ", lenOfLongIncSubArr($arr, $n);     // This code is contributed by nitin mittal.?>
<script>  // Javascript implementation to find the length of// longest increasing contiguous subarray  // function to find the length of longest increasing// contiguous subarrayfunction lenOfLongIncSubArr(arr, n){    // 'max' to store the length of longest    // increasing subarray    // 'len' to store the lengths of longest    // increasing subarray at different    // instants of time    var max = 1, len = 1;          // traverse the array from the 2nd element    for (var i=1; i<n; i++)    {        // if current element if greater than previous        // element, then this element helps in building        // up the previous increasing subarray encountered        // so far        if (arr[i] > arr[i-1])            len++;        else        {            // check if 'max' length is less than the length            // of the current increasing subarray. If true,            // then update 'max'            if (max < len)              {                max = len;            }                              // reset 'len' to 1 as from this element            // again the length of the new increasing            // subarray is being calculated              len = 1;          }      }          // comparing the length of the last    // increasing subarray with 'max'    if (max < len)    {        max = len;    }         // required maximum length    return max;}  // Driver program to test abovevar arr = [5, 6, 3, 5, 7, 8, 9, 1, 2];var n = arr.length;document.write("Length = " + lenOfLongIncSubArr(arr, n));// This code is contributed by shivani.</script>
Output:  
Length = 5
Time Complexity: O(n)
How to print the subarray? We can print the subarray by keeping track of the index with the largest length. 
C++
Java
Python3
C#
PHP
Javascript
// C++ implementation to find the length of// longest increasing contiguous subarray#include <bits/stdc++.h>using namespace std; // function to find the length of longest increasing// contiguous subarrayvoid printLogestIncSubArr(int arr[], int n){    // 'max' to store the length of longest    // increasing subarray    // 'len' to store the lengths of longest    // increasing subarray at different    // instants of time    int max = 1, len = 1, maxIndex = 0;         // traverse the array from the 2nd element    for (int i=1; i<n; i++)    {        // if current element if greater than previous        // element, then this element helps in building        // up the previous increasing subarray encountered        // so far        if (arr[i] > arr[i-1])            len++;        else        {            // check if 'max' length is less than the length            // of the current increasing subarray. If true,            // then update 'max'            if (max < len)               {                max = len;                                 // index assign the starting index of                // longest increasing contiguous subarray.                  maxIndex = i - max;            }                             // reset 'len' to 1 as from this element            // again the length of the new increasing            // subarray is being calculated               len = 1;           }       }         // comparing the length of the last    // increasing subarray with 'max'    if (max < len)    {        max = len;        maxIndex = n - max;    }     // Print the elements of longest increasing    // contiguous subarray.    for (int i=maxIndex; i<max+maxIndex; i++)        cout << arr[i] << " ";} // Driver program to test aboveint main(){    int arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2};    int n = sizeof(arr) / sizeof(arr[0]);    printLogestIncSubArr(arr, n);    return 0;    }// This code is contributed by Dharmendra kumar
// JAVA Code For Longest increasing subarrayimport java.util.*; class GFG {         // function to find the length of longest    // increasing contiguous subarray    public static void printLogestIncSubArr(int arr[],                                              int n)    {        // 'max' to store the length of longest        // increasing subarray        // 'len' to store the lengths of longest        // increasing subarray at different        // instants of time        int max = 1, len = 1, maxIndex = 0;                  // traverse the array from the 2nd element        for (int i = 1; i < n; i++)        {            // if current element if greater than            // previous element, then this element            // helps in building up the previous            // increasing subarray encountered            // so far            if (arr[i] > arr[i-1])                len++;            else            {                // check if 'max' length is less                // than the length of the current                // increasing subarray. If true,                // then update 'max'                if (max < len)                   {                    max = len;                                          // index assign the starting                    // index of longest increasing                    // contiguous subarray.                      maxIndex = i - max;                }                                      // reset 'len' to 1 as from this                // element again the length of the                // new increasing subarray is                // being calculated                   len = 1;               }           }                  // comparing the length of the last        // increasing subarray with 'max'        if (max < len)        {            max = len;            maxIndex = n - max;        }              // Print the elements of longest        // increasing contiguous subarray.        for (int i = maxIndex; i < max+maxIndex; i++)            System.out.print(arr[i] + " ");    }         /* Driver program to test above function */    public static void main(String[] args)    {        int arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2};        int n = arr.length;        printLogestIncSubArr(arr, n);             }}   // This code is contributed by Arnav Kr. Mandal.
# Python 3 implementation to find the length of# longest increasing contiguous subarray  # function to find the length of longest increasing# contiguous subarraydef printLogestIncSubArr( arr, n) :     # 'max' to store the length of longest    # increasing subarray    # 'len' to store the lengths of longest    # increasing subarray at different    # instants of time    m = 1    l = 1    maxIndex = 0          # traverse the array from the 2nd element    for i in range(1, n) :         # if current element if greater than previous        # element, then this element helps in building        # up the previous increasing subarray        # encountered so far        if (arr[i] > arr[i-1]) :            l =l + 1        else :             # check if 'max' length is less than the length            # of the current increasing subarray. If true,            # then update 'max'            if (m < l)  :                m = l                 # index assign the starting index of                # longest increasing contiguous subarray.                  maxIndex = i - m                               # reset 'len' to 1 as from this element            # again the length of the new increasing            # subarray is being calculated               l = 1                         # comparing the length of the last    # increasing subarray with 'max'    if (m < l) :        m = l        maxIndex = n - m         # Print the elements of longest    # increasing contiguous subarray.    for i in range(maxIndex, (m+maxIndex)) :        print(arr[i] , end=" ")         # Driver program to test abovearr = [5, 6, 3, 5, 7, 8, 9, 1, 2]n = len(arr)printLogestIncSubArr(arr, n)          # This code is contributed# by Nikita Tiwari
// C# Code to print// Longest increasing subarrayusing System; class GFG {     // function to find the length of longest    // increasing contiguous subarray    public static void printLogestIncSubArr(int[] arr,                                                int n)    {        // 'max' to store the length of longest        // increasing subarray        // 'len' to store the lengths of longest        // increasing subarray at different        // instants of time        int max = 1, len = 1, maxIndex = 0;         // traverse the array from the 2nd element        for (int i = 1; i < n; i++) {                         // if current element if greater than            // previous element, then this element            // helps in building up the previous            // increasing subarray encountered            // so far            if (arr[i] > arr[i - 1])                len++;            else            {                // check if 'max' length is less                // than the length of the current                // increasing subarray. If true,                // then update 'max'                if (max < len) {                    max = len;                     // index assign the starting                    // index of longest increasing                    // contiguous subarray.                    maxIndex = i - max;                }                 // reset 'len' to 1 as from this                // element again the length of the                // new increasing subarray is                // being calculated                len = 1;            }        }         // comparing the length of the last        // increasing subarray with 'max'        if (max < len) {            max = len;            maxIndex = n - max;        }         // Print the elements of longest        // increasing contiguous subarray.        for (int i = maxIndex; i < max + maxIndex; i++)            Console.Write(arr[i] + " ");    }     /* Driver program to test above function */    public static void Main()    {        int[] arr = { 5, 6, 3, 5, 7, 8, 9, 1, 2 };        int n = arr.Length;        printLogestIncSubArr(arr, n);    }} // This code is contributed by Sam007
<?php// PHP implementation to find// the length of longest increasing// contiguous subarray // function to find the length of// longest increasing contiguous subarrayfunction printLogestIncSubArr(&$arr, $n){    // 'max' to store the length of    // longest increasing subarray    // 'len' to store the lengths of    // longest increasing subarray at    // different instants of time    $max = 1;    $len = 1;    $maxIndex = 0;         // traverse the array from    // the 2nd element    for ($i = 1; $i < $n; $i++)    {        // if current element if greater        // than previous element, then        // this element helps in building        // up the previous increasing        // subarray encountered so far        if ($arr[$i] > $arr[$i - 1])            $len++;        else        {            // check if 'max' length is less            // than the length of the current            // increasing subarray. If true,            // then update 'max'            if ($max < $len)            {                $max = $len;                                 // index assign the starting                // index of longest increasing                // contiguous subarray.                $maxIndex = $i - $max;            }                             // reset 'len' to 1 as from this            // element again the length of            // the new increasing subarray            // is being calculated            $len = 1;        }    }         // comparing the length of    // the last increasing    // subarray with 'max'    if ($max < $len)    {        $max = $len;        $maxIndex = $n - $max;    }     // Print the elements of    // longest increasing    // contiguous subarray.    for ($i = $maxIndex;         $i < ($max + $maxIndex); $i++)        echo($arr[$i] . " ") ;         } // Driver Code$arr = array(5, 6, 3, 5, 7,             8, 9, 1, 2);$n = sizeof($arr);printLogestIncSubArr($arr, $n);     // This code is contributed// by Shivi_Aggarwal?>
<script> // Javascript implementation to find the length of// longest increasing contiguous subarray // function to find the length of longest increasing// contiguous subarrayfunction printLogestIncSubArr(arr, n){    // 'max' to store the length of longest    // increasing subarray    // 'len' to store the lengths of longest    // increasing subarray at different    // instants of time    var max = 1, len = 1, maxIndex = 0;         // traverse the array from the 2nd element    for (var i=1; i<n; i++)    {        // if current element if greater than previous        // element, then this element helps in building        // up the previous increasing subarray encountered        // so far        if (arr[i] > arr[i-1])            len++;        else        {            // check if 'max' length is less than the length            // of the current increasing subarray. If true,            // then update 'max'            if (max < len)               {                max = len;                                 // index assign the starting index of                // longest increasing contiguous subarray.                  maxIndex = i - max;            }                             // reset 'len' to 1 as from this element            // again the length of the new increasing            // subarray is being calculated               len = 1;           }       }         // comparing the length of the last    // increasing subarray with 'max'    if (max < len)    {        max = len;        maxIndex = n - max;    }     // Print the elements of longest increasing    // contiguous subarray.    for (var i=maxIndex; i<max+maxIndex; i++)        document.write( arr[i] + " ");} // Driver program to test abovevar arr = [5, 6, 3, 5, 7, 8, 9, 1, 2];var n = arr.length;printLogestIncSubArr(arr, n); // This code is contributed by rrrtnx.</script>
Output:  
3 5 7 8 9 
This article is contributed by Ayush Jauhari. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
nitin mittal
Shivi_Aggarwal
rrrtnx
shivanisinghss2110
sumitgumber28
Amazon
Arrays
Amazon
Arrays
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Multidimensional Arrays in Java
Python | Using 2D arrays/lists the right way
Find the smallest positive integer value that cannot be represented as sum of any subset of a given array
Find a triplet that sum to a given value
Product of Array except itself
Introduction to Arrays
Linked List vs Array
Median of two sorted arrays of same size
Stack Data Structure (Introduction and Program)
Smallest subarray with sum greater than a given value