题解 | #信封嵌套问题#

信封嵌套问题

http://www.nowcoder.com/practice/9bf77b5b018d4d24951c9a7edb40408f

二维LIS问题

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param letters int二维数组 
# @return int
#
class Solution:
    def maxLetters(self , letters ):
        # write code here
        def LIS(nums):
            n = len(nums)
            dp = [nums[0]]

            for i in range(n):
                if dp[-1] < nums[i]:
                    dp.append(nums[i])
                else:
                    # find k in dp s.t. dp[k] < nums[i] < dp[k+1]
                    # and replace dp[k+1] with nums[i]
                    lo, hi = 0, len(dp)-2                    
                    while lo <= hi:
                        mid = lo+(hi-lo)/2
                        if dp[mid] == nums[i]:
                            break
                        elif dp[mid] < nums[i]:
                            lo = mid + 1
                        else:
                            hi = mid - 1
                    dp[lo] = nums[i]
            return len(dp)
        n = len(letters)        
        letters.sort(key=lambda x:(x[0], -x[1]))
        nums = [letters[i][1] for i in range(n)]
        return LIS(nums)
全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务