LeetCode 300 最長上升子序列

給定一個整數數組,找到最長上升子序列的長度。

利用二分法,思路見官方題解。

from typing import *
class Solution:
    def lengthOfLIS(self, nums: List[int]) -> int:
        dp=[]
        for val in nums:
            if not dp or dp[-1]<val:
                dp.append(val)
            else:
                idx=self.search(dp,0,len(dp)-1,val)
                dp[idx]=val
        return len(dp)

    def search(self,dp,lo,hi,val):
        idx=-1
        while lo<=hi:
            mid=(lo+hi)//2
            if dp[mid]==val:
                return mid
            elif dp[mid]>val:
                idx=mid
                hi=mid-1
            else:
                lo=mid+1
        return idx

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章