Problem of the day
For a given array with N elements, you need to find the length of the longest subsequence from the array such that all the elements of the subsequence are sorted in strictly increasing order.
Strictly Increasing Sequence is when each term in the sequence is larger than the preceding term.
For example:[1, 2, 3, 4] is a strictly increasing array, while [2, 1, 4, 3] is not.
The first line of input contains an integer 'N', representing the size of the array.
The second line of input contains 'N' space-separated integers, representing the elements of the array.
Output Format:
The only output line contains one integer representing the length of the longest increasing subsequence.
Note:
You do not need to print anything; it has already been taken care of. Just implement the given functions.
Input Constraints
1 <= N <= 10^5
-10^5 <= element <= 10^5
Time Limit: 1sec
6
5 4 11 1 16 8
3
Length of longest subsequence is 3 i.e. [5, 11, 16] or [4, 11, 16].
3
1 2 2
2
Try to write a recursive algorithm which would try out all the possibilities.
if (arr[curPosition] > prev)
{
taken = 1 + lisHelper(arr[curPosition], curPosition + 1);
}
int notTaken = lisHelper(prev,curPosition + 1);
//we can always skip the current element
O(2 ^ N), where N is the size of the array.
Since every element it will be either used or not so the size of the recursion tree will be 2 ^ N.
O(N), where N is the size of the array.
For stack space in recursion.