题解 | 信封嵌套

信封嵌套

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))

全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
SmileDog12138:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务