首页 > 试题广场 >

信封嵌套问题

[编程题]信封嵌套问题
  • 热度指数:4319 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给 n 个信封的长度和宽度。如果信封 a 的长和宽都小于信封 b ,那么信封 a 可以放到信封 b 里,请求出信封最多可以嵌套多少层。

数据范围:
要求:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
示例1

输入

[[3,4],[2,3],[4,5],[1,3],[2,2],[3,6],[1,2],[3,2],[2,4]]

输出

4

说明

从里到外分别是{1,2},{2,3},{3,4},{4,5}。       
示例2

输入

[[1,4],[4,1]]

输出

1

备注:
时间复杂度O(nlog n),空间复杂度O(n)。
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param letters int二维数组 
# @return int
#
class Solution:
    def maxLetters(self , letters ):
        letters.sort(key=lambda x: (x[0], -x[1]))
        w, h = 0, 0
        cnt = 0
        # 转换成最长递增子序列的问题了
        def bs(nums, target):
            # 找到第一个比target大的数,返回index
            l, r = 0, len(nums)-1
            while l < r:
                m = l + ((r-l)>>1)
                if nums[m] >= target:
                    r = m
                else:
                    l = m + 1
            return l if nums[l] >= target else l+1
        l = []
        for i in range(len(letters)):
            if not l&nbs***bsp;l[-1] < letters[i][1]:
                l.append(letters[i][1])
            else:
                idx = bs(l, letters[i][1])
                l[idx] = letters[i][1]
        return len(l)

发表于 2021-04-04 21:13:11 回复(0)

问题信息

上传者:牛客301499号
难度:
1条回答 2856浏览

热门推荐

通过挑战的用户

查看代码