You are on page 1of 2

Longest Increasing Subsequence

package com.practice.subsequence;

import java.util.ArrayList;

import java.util.List;

public class LongestIncreasingSubsequence {

public static List<Integer> findLongestIncreasingSubsequence(int[] nums) {

if (nums == null || nums.length == 0) {

return new ArrayList<>();

int n = nums.length;

int[] dp = new int[n];

int[] prev = new int[n];

for (int i = 0; i < n; i++) {

dp[i] = 1;

prev[i] = -1;

for (int j = 0; j < i; j++) {

if (nums[j] < nums[i] && dp[j] + 1 > dp[i]) {

dp[i] = dp[j] + 1;

prev[i] = j;

int maxLength = 0;
int lastIndex = 0;

for (int i = 0; i < n; i++) {

if (dp[i] > maxLength) {

maxLength = dp[i];

lastIndex = i;

List<Integer> result = new ArrayList<>();

while (lastIndex != -1) {

result.add(0, nums[lastIndex]);

lastIndex = prev[lastIndex];

return result;

public static void main(String[] args) {

int[] nums = {98, 6, 56, 23, 10, 22, 9, 33, 21, 50, 41, 89, 60, 43, 87, 4};

List<Integer> longestIncreasingSubsequence = findLongestIncreasingSubsequence(nums);

System.out.println("Longest Increasing Subsequence: " + longestIncreasingSubsequence);

You might also like