Study/Algorithm
[leetcode]300. Longest Increasing Subsequence
DoRoMii
2019. 8. 11. 17:47
728x90
300. Longest Increasing Subsequence
Given an unsorted array of integers, find the length of longest increasing subsequence.
Example:
Input: [10,9,2,5,3,7,101,18] Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4.
Note:
- There may be more than one LIS combination, it is only necessary for you to return the length.
- Your algorithm should run in O(n2) complexity.
Follow up: Could you improve it to O(n log n) time complexity?
class Solution(object):
def lengthOfLIS(self, nums):
sub =[]
def binarySearch(sub, num):
l,r = 0, len(sub)-1
while l<=r:
mid = (l+r)//2
if sub[mid] == num :
return mid
elif sub[mid] < num:
l = mid+1
else :
r = mid-1
return l
for n in nums:
pos = binarySearch(sub, n)
#print(pos)
if len(sub)== pos:
sub.append(n)
else:
sub[pos] = n
return len(sub)