amphibia89

Longest Increasing Sequence

Apr 5th, 2016
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.39 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Program
  6. {
  7.  
  8.     static void Main(string[] args)
  9.     {
  10.         var data = Console.ReadLine().Split()
  11.             .Select(int.Parse).ToList();
  12.  
  13.         var longestAscendingSequence = ExtractAscendingSequence(data);
  14.         Console.WriteLine(string.Join(" ", longestAscendingSequence));
  15.     }
  16.  
  17.     private static IEnumerable<int> ExtractAscendingSequence(IList<int> data)
  18.     {
  19.         var maxStack = new Stack<int>();
  20.         var currentStack = new Stack<int>();
  21.  
  22.         for (int index = 0; index < data.Count; index++)
  23.         {
  24.             currentStack.Push(data[index]);
  25.             FindNextElement(data, index, ref maxStack, currentStack);
  26.             currentStack.Pop();
  27.         }
  28.  
  29.         return maxStack;
  30.     }
  31.  
  32.     private static void FindNextElement(IList<int> data, int index, ref Stack<int> maxStack,
  33.         Stack<int> currentStack)
  34.     {
  35.         for (int scanIndex = index + 1; scanIndex < data.Count; scanIndex++)
  36.         {
  37.             if (data[scanIndex] > data[index])
  38.             {
  39.                 currentStack.Push(data[scanIndex]);
  40.                 FindNextElement(data, scanIndex, ref maxStack, currentStack);
  41.                 currentStack.Pop();
  42.             }
  43.         }
  44.  
  45.         if (maxStack.Count < currentStack.Count)
  46.             maxStack = new Stack<int>(currentStack);
  47.     }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment