给 n 个信封的长度和宽度。如果信封 a 的长和宽都小于信封 b ,那么信封 a 可以放到信封 b 里,请求出信封最多可以嵌套多少层。
数据范围: ,
要求:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
进阶:空间复杂度 ,时间复杂度
[[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}。
[[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)