Didart

Longest Increasing Subsequence

Dec 13th, 2022 (edited)
691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.99 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStreamReader;
  4. import java.nio.charset.StandardCharsets;
  5. import java.util.Arrays;
  6.  
  7. public class LongestIncreasingSubsequence {
  8.     public static void main(final String[] args) {
  9.  
  10.         try (final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8))) {
  11.  
  12.             int[] numbers = Arrays
  13.                     .stream(reader.readLine().trim().split("\\s+"))
  14.                     .mapToInt(Integer::parseInt)
  15.                     .toArray();
  16.  
  17.             int[] sequence = new int[numbers.length];  
  18.             int[] previous = new int[numbers.length];  
  19.             for (int currentIndex = 0; currentIndex < numbers.length; currentIndex++) {
  20.  
  21.                 sequence[currentIndex] = 1;
  22.                 previous[currentIndex] = -1;
  23.  
  24.                 for (int prevIndex = 0; prevIndex < currentIndex; prevIndex++) {
  25.  
  26.                     if (numbers[prevIndex] < numbers[currentIndex] &&
  27.                             sequence[prevIndex] >= sequence[currentIndex]) {
  28.  
  29.                         sequence[currentIndex] = sequence[prevIndex] + 1;
  30.                         previous[currentIndex] = prevIndex;
  31.                     }
  32.                 }
  33.             }
  34.  
  35.             int lastIndex = -1;
  36.             int maxLength = 0;
  37.  
  38.             for (int index = 0; index < numbers.length; index++) {
  39.                 if (maxLength < sequence[index]) {
  40.                     maxLength = sequence[index];
  41.                     lastIndex = index;
  42.                 }
  43.             }
  44.  
  45.             int[] lis = new int[maxLength];
  46.  
  47.             while (lastIndex != -1) {
  48.                 lis[--maxLength] = numbers[lastIndex];
  49.                 lastIndex = previous[lastIndex];
  50.             }
  51.  
  52.             System.out.println(Arrays.toString(lis).replaceAll("[,\\[\\]]", "").trim());
  53.  
  54.         } catch (IOException | NullPointerException e) {
  55.             e.printStackTrace();
  56.         }
  57.     }
  58. }
  59.  
  60.  
Advertisement
Add Comment
Please, Sign In to add comment