diff --git a/src/main/java/com/thealgorithms/recursion/LongestIncreasingSubsequence.java b/src/main/java/com/thealgorithms/recursion/LongestIncreasingSubsequence.java new file mode 100644 index 000000000000..4ca11927e6be --- /dev/null +++ b/src/main/java/com/thealgorithms/recursion/LongestIncreasingSubsequence.java @@ -0,0 +1,24 @@ +package com.thealgorithms.recursion; + +public class LongestIncreasingSubsequence { + + public static int solve(int[] nums, int prev, int idx) { + // base case + if (idx == nums.length) { + return 0; + } + + // process + int include = 0; + if (prev == -1 || nums[idx] > nums[prev]) { + include = 1 + solve(nums, idx, idx + 1); + } + int exclude = solve(nums, prev, idx + 1); + return Math.max(include, exclude); + } + + public int lengthOfLIS(int[] nums) { + int prev = -1; + return solve(nums, prev, 0); + } +}