602. 俄罗斯套娃信封

602. 俄罗斯套娃信封

中文English

给一定数量的信封,带有整数对 (w, h) 分别代表信封宽度和高度。一个信封的宽高均大于另一个信封时可以放下另一个信封。
求最大的信封嵌套层数。

样例

样例 1:

输入:[[5,4],[6,4],[6,7],[2,3]]
输出:3
解释:
最大的信封嵌套层数是 3 ([2,3] => [5,4] => [6,7])。

样例 2:

输入:[[4,5],[4,6],[6,7],[2,3],[1,1]]
输出:4
解释:
最大的信封嵌套层数是 4 ([1,1] => [2,3] => [4,5] / [4,6] => [6,7])。
输入测试数据 (每行一个参数)如何理解测试数据?

 

class Solution:
    """
    @param: envelopes: a number of envelopes with widths and heights
    @return: the maximum number of envelopes
    """
    '''
    大致思路:
    求出最大可能套娃的数量
    '''
    def maxEnvelopes(self, envelopes):
        if not envelopes or len(envelopes) == 0:return 0 

        #初始化
        l = len(envelopes)
        dp = [1 for _ in range(l)]

        for i in range(1,l):
            for j in range(i):
                if (envelopes[i] != envelopes[j]):
                    if envelopes[i][0] > envelopes[j][0] and envelopes[i][1] > envelopes[j][1]:
                        dp[i] = max(dp[i],dp[j] + 1)
        
        return max(dp)

注:时间复杂度超过了限制,O(n2),lintcode未通过,待优化。

posted @ 2020-06-08 02:15  风不再来  阅读(215)  评论(0编辑  收藏  举报