RGAlex

O4. Longest Increasing Subsequence

Feb 4th, 2021
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.31 KB | None | 0 0
  1. package ArraysMoreExercise;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Scanner;
  5.  
  6. public class O4LongestIncreasingSubsequence {
  7.     public static void main(String[] args) {
  8.         Scanner scanner = new Scanner(System.in);
  9.         int[] numbers = Arrays.stream(scanner.nextLine().split(" "))
  10.                 .mapToInt(Integer::parseInt).toArray();
  11.  
  12.         int maxLength = 0;
  13.         int lastIndex = -1;
  14.         int[] len = new int[numbers.length];
  15.         int[] previous = new int[numbers.length];
  16.  
  17.         for (int i = 0; i < numbers.length; i++) {
  18.             len[i] = 1;
  19.             previous[i] = -1;
  20.  
  21.             for (int j = 0; j < i; j++) {
  22.                 if (numbers[j] < numbers[i] && len[j] + 1 > len[i]) {
  23.                     len[i] = len[j] + 1;
  24.                     previous[i] = j;
  25.                 }
  26.             }
  27.             if (len[i] > maxLength) {
  28.                 maxLength = len[i];
  29.                 lastIndex = i;
  30.             }
  31.         }
  32.         int[] lis = new int[maxLength];
  33.         int currentIndex = maxLength - 1;
  34.  
  35.         while (lastIndex != -1) {
  36.             lis[currentIndex] = numbers[lastIndex];
  37.             currentIndex--;
  38.             lastIndex = previous[lastIndex];
  39.         }
  40.         for (int number : lis) {
  41.             System.out.print(number + " ");
  42.         }
  43.     }
  44. }
Advertisement
Add Comment
Please, Sign In to add comment