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]