LIS-O(NlogN)算法

本文介绍了如何使用最长递增子序列(LIS)算法解决CTCI中的一道题目——叠罗汉。题目要求上面的人比下面的人轻,给定每个人的高度和体重,求解最多能叠多少人。通过先按身高排序,然后在体重维度找到最长递增子序列,实现了O(NlogN)的时间复杂度解决方案。
摘要由CSDN通过智能技术生成

CTCI中的一道题:叠罗汉,每个人都踩在另一个人的肩膀上。要求上面的人比下面的人轻。给出每个人的身高和体重,设计一个函数计算叠罗汉节目中最多可以叠多少人?
例子:
输入(身高,体重):(65,92)(70,105)(56,90)(75,190)(60,95)(68,110)
输出:最多可叠4人,从上到下是:(56,90)(60,95)(68,110)(75,190)

解答:先按身高排序,身高排好后在体重那个维度找到最长的递增子序列。按照身高排序后的顺序是(56,90)(60,95)(65,92)(68,110)(70,105)(75,190)。定义一个序列d,然后令i = 1 to n来逐个考察体重的值,d中每次存放的都是当前LIS长度的最小末尾。
首先,d[1] = 90,也就是说当只有90时,长度为1的LIS的最小末尾是90,len = 1;
d[2] = 95,也就是长度为2的LIS的最小末尾是95,len = 2;
d[2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值