Longest increasing subarray
Last Updated :
07 Feb, 2023
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
Implementation:
C++
// 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 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<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 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<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.
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
<?php
// PHP implementation to find the length of
// longest increasing contiguous subarray
// function to find the length of
// longest increasing contiguous
// subarray
function 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.
?>
JavaScript
<script>
// Javascript implementation to find the length of
// longest increasing contiguous subarray
// function to find the length of longest increasing
// contiguous subarray
function 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 above
var 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>
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 <bits/stdc++.h>
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<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 above
int main()
{
int arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2};
int n = sizeof(arr) / sizeof(arr[0]);
printLongestIncSubArr(arr, n);
return 0;
}
// This code is contributed by Dharmendra kumar
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
<?php
// PHP implementation to find
// the length of longest increasing
// contiguous subarray
// function to find the length of
// longest increasing contiguous subarray
function 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
$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);
printLongestIncSubArr($arr, $n);
// This code is contributed
// by Shivi_Aggarwal
?>
JavaScript
<script>
// Javascript implementation to find the length of
// longest increasing contiguous subarray
// function to find the length of longest increasing
// contiguous subarray
function 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
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 above
var arr = [5, 6, 3, 5, 7, 8, 9, 1, 2];
var n = arr.length;
printLongestIncSubArr(arr, n);
// This code is contributed by rrrtnx.
</script>
Time Complexity: O(N) where N is the number of elements in the array.
Auxiliary Space: O(1)
Similar Reads
Longest Increasing Subsequence (LIS) Given an array arr[] of size n, the task is to find the length of the Longest Increasing Subsequence (LIS) i.e., the longest possible subsequence in which the elements of the subsequence are sorted in increasing order.Examples: Input: arr[] = [3, 10, 2, 1, 20]Output: 3Explanation: The longest increa
14 min read
Print the longest increasing consecutive subarray Given an array arr[] of size N, the task is to print the longest increasing subarray such that elements in the subarray are consecutive integers. Examples: Input: arr[] = {1, 9, 3, 4, 20, 2}Output: {3, 4}Explanation: The subarray {3, 4} is the longest subarray of consecutive elements Input: arr[] =
5 min read
Longest subarray having maximum sum Given an array arr[] containing n integers. The problem is to find the length of the subarray having maximum sum. If there exists two or more subarrays with maximum sum then print the length of the longest subarray.Examples: Input : arr[] = {5, -2, -1, 3, -4}Output : 4There are two subarrays with ma
12 min read
Longest Subarray with an Extra 1 Given a binary array arr[], the task is to find the length of the longest subarray having count of 1s exactly one more than count of 0s. Examples: Input: arr[] = [0, 1, 1, 0, 0, 1]Output: 5Explanation: The subarray from index 1 to 5, that is [1, 1, 0, 0, 1] has exactly one more 1s than 0s.Input: arr
10 min read
Longest Subarray with sum differences ⤠K Given a sorted array arr[] of size N, the task is to find the length of the longest subarray and print the subarray such that the sum of the differences of the maximum element of the chosen subarray with all other elements of that same subarray is ⤠K.i.e. â(amax-ai) ⤠K, for that given subarray. Ex
7 min read