# Longest increasing subarray

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} ```
Recommended Practice

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 ```

Implementation:

## C++

 `// C++ implementation to find the length of ` `// longest increasing contiguous subarray` `#include `   `using` `namespace` `std;`   `// function to find the length of longest increasing ` `// contiguous subarray` `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 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 above` `int` `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

 `// JAVA Code to find length of ` `// Longest increasing subarray` `import` `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 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.`

## Python3

 `# Python 3 implementation to find the length of ` `# longest increasing contiguous subarray`   ` `  `# function to find the length of longest ` `# increasing contiguous subarray` `def` `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#

 `// C# Code to find length of` `// Longest increasing subarray` `using` `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

 ` ``\$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.` `?>`

## Javascript

 ``

Output

`Length = 5`

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

How to print the subarray?
We can print the subarray by keeping track of the index with the largest length.

Implementation:

## C++

 `// C++ implementation to find the length of ` `// longest increasing contiguous subarray` `#include ` `using` `namespace` `std;`   `// function to find the length of longest increasing ` `// contiguous subarray` `void` `printLongestIncSubArr(``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 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

## Java

 `// JAVA Code For Longest increasing subarray` `import` `java.util.*;`   `class` `GFG {` `    `  `    ``// function to find the length of longest ` `    ``// increasing contiguous subarray` `    ``public` `static` `void` `printLongestIncSubArr(``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;` `        ``printLongestIncSubArr(arr, n);` `        `  `    ``}` `}` `  `  `// This code is contributed by Arnav Kr. Mandal.`

## Python3

 `# Python 3 implementation to find the length of ` `# longest increasing contiguous subarray`     `# function to find the length of longest increasing ` `# contiguous subarray` `def` `printLongestIncSubArr( 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 above` `arr ``=` `[``5``, ``6``, ``3``, ``5``, ``7``, ``8``, ``9``, ``1``, ``2``]` `n ``=` `len``(arr)` `printLongestIncSubArr(arr, n)` `    `  `    `  `# This code is contributed` `# by Nikita Tiwari`

## C#

 `// C# Code to print ` `// Longest increasing subarray` `using` `System;`   `class` `GFG {`   `    ``// function to find the length of longest` `    ``// increasing contiguous subarray` `    ``public` `static` `void` `printLongestIncSubArr(``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;` `        ``printLongestIncSubArr(arr, n);` `    ``}` `}`   `// This code is contributed by Sam007`

## PHP

 ` ``\$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``);` `printLongestIncSubArr(``\$arr``, ``\$n``);` `    `  `// This code is contributed` `// by Shivi_Aggarwal` `?>`

## Javascript

 ``

Output

`3 5 7 8 9 `

Time Complexity: O(N) where N is the number of elements in the array.
Auxiliary Space: O(1)

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.

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