题解 | 信封嵌套
信封嵌套
https://www.nowcoder.com/practice/25fe1fc89c4c4e82bbc63df04bc6ca30
def maxEnvelopes(envelopes): if not envelopes: return 0 # 按照长度升序排列,如果长度相同则按照宽度降序排列 envelopes.sort(key=lambda x: (x[0], -x[1])) # 提取宽度并寻找最长递增子序列 widths = [envelope[1] for envelope in envelopes] dp = [] for width in widths: # 使用二分查找找到第一个大于等于当前宽度的位置 left, right = 0, len(dp) while left < right: mid = (left + right) // 2 if dp[mid] >= width: right = mid else: left = mid + 1 # 如果找到的位置等于 dp 的长度,说明当前宽度比所有元素都大,直接添加到末尾 if left == len(dp): dp.append(width) else: # 否则替换掉第一个大于等于当前宽度的元素 dp[left] = width return len(dp) # 输入处理 n = int(input()) envelopes = [] for _ in range(n): l, w = map(int, input().split()) envelopes.append((l, w)) # 输出结果 print(maxEnvelopes(envelopes))