Advertisement
martinvalchev

Longest_Increasing_Subsequence

Feb 11th, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.78 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5.  
  6. namespace Longest_Increasing_Subsequence
  7. {
  8.     class Program
  9.     {
  10.         static void Main(string[] args)
  11.         {
  12.             List<int> numbersList = Console.ReadLine().Split(' ').Select(int.Parse).ToList();
  13.  
  14.             List<int> longestSequens = ExecuteProgram(numbersList);
  15.  
  16.             Writer(longestSequens);
  17.         }
  18.  
  19.         private static void Writer(List<int> longestSequens)
  20.         {
  21.             Console.WriteLine(string.Join(" ", longestSequens));
  22.         }
  23.  
  24.         private static List<int> ExecuteProgram(List<int> numbersList)
  25.         {
  26.             int[] lengthArr = new int[numbersList.Count];
  27.             int[] prevArr = new int[numbersList.Count];
  28.  
  29.             int maxLength = 0;
  30.             int lastIndex = -1;
  31.  
  32.             for (int i = 0; i < numbersList.Count; i++)
  33.             {
  34.                 lengthArr[i] = 1;
  35.                 prevArr[i] = -1;
  36.  
  37.                 for (int j = 0; j < i; j++)
  38.                 {
  39.                     if (numbersList[j] < numbersList[i] && lengthArr[j] >= lengthArr[i])
  40.                     {
  41.                         lengthArr[i] = 1 + lengthArr[j];
  42.                         prevArr[i] = j;
  43.                     }
  44.                 }
  45.  
  46.                 if (lengthArr[i] > maxLength)
  47.                 {
  48.                     maxLength = lengthArr[i];
  49.                     lastIndex = i;
  50.                 }
  51.             }
  52.  
  53.             var longestSeq = new List<int>();
  54.  
  55.             for (int i = 0; i < maxLength; i++)
  56.             {
  57.                 longestSeq.Add(numbersList[lastIndex]);
  58.                 lastIndex = prevArr[lastIndex];
  59.             }
  60.  
  61.             longestSeq.Reverse();
  62.  
  63.             return longestSeq.ToList();
  64.         }
  65.     }
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement