바위타는 두루미

[leetcode]300. Longest Increasing Subsequence 본문

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)
            
                

'Study > Algorithm' 카테고리의 다른 글

16.10 살아있는 사람  (0) 2019.08.14
16.1 숫자 교환  (0) 2019.08.14
[leetcode]322. Coin Change  (0) 2019.08.11
[leetcode]62. Unique Paths  (0) 2019.08.11
[leetcode]55. Jump Game  (0) 2019.08.11
Comments