LeetCode354 俄罗斯套娃信封问题

LeetCode354 俄罗斯套娃信封问题

排序后求最长上升子序列

注意对\(y\)值从大到小排序可以保证相同\(x\)只取一个\(y\)

class Solution:
    def maxEnvelopes(self, envelopes: List[List[int]]) -> int:

        envelopes.sort(key=lambda x:(x[0], - x[1]))
        # print(envelopes)
        dp, n = [], len(envelopes)

        for i in range(n):
            if i == 0 or envelopes[i][1] > dp[-1]: dp.append(envelopes[i][1])
            else:
                l, r = 0, len(dp)
                while l < r:
                    mid = (l + r) // 2
                    if dp[mid] >= envelopes[i][1]: r = mid
                    else: l = mid + 1

                dp[l] = envelopes[i][1]
        
        return len(dp)

posted on 2022-07-31 22:00  solvit  阅读(33)  评论(0)    收藏  举报

导航