Thanks to visit codestin.com
Credit goes to www.tutorialspoint.com

Longest Increasing Subsequence in Python



Suppose we have an unsorted list of integers. We have to find the longest increasing subsequence. So if the input is [10,9,2,5,3,7,101,18], then the output will be 4, as the increasing subsequence is [2,3,7,101]

To solve this, we will follow these steps −

  • trail := an array of length 0 to length of nums – 1, and fill this with 0
  • size := 0
  • for x in nums
    • i := 0, j := size
    • while i is not j
      • mid := i + (j - i) / 2
      • if trails[mid] < x, then i := mid + 1, otherwise j := mid
    • trails[i] := x
    • size := maximum of i + 1 and size
  • return size

Let us see the following implementation to get better understanding −

Example

 Live Demo

class Solution(object):
   def lengthOfLIS(self, nums):
      tails =[0 for i in range(len(nums))]
      size = 0
      for x in nums:
         i=0
         j=size
         while i!=j:
            mid = i + (j-i)//2
            if tails[mid]< x:
               i= mid+1
            else:
               j = mid
               tails[i] = x
               size = max(i+1,size)
               #print(tails)
      return size
ob1 = Solution()
print(ob1.lengthOfLIS([10,9,2,5,3,7,101,18]))

Input

[10,9,2,5,3,7,101,18]

Output

4
Updated on: 2020-05-04T09:10:18+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements