【LeetCode】马戏团人塔 Java 题解
题目描述
有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。
复制代码
思路分析
今天的算法题目是叠罗汉题目,题目很清晰,规则是*上面的人要比下面的人矮一点且轻一点**。题目分别给出了每个人的身高和体重。
这是一个综合问题,同时需要考虑身高和体重,相对复杂,我们可以先排序身高数组,然后在处理体重数组。排序的时候,可以使用自定义的 comparator 处理器比较。
完成比较后的身高数组,我们之后需要处理体重,此时问题就转换成了 最长上升子序列问题。最长上升子序列是经典题目,解决方法可以是 DP,也可以是 二分查找 + DP,如果你没有听过 最长上升子序列,建议先去学会最长上升子序列解法。在解决这个题目能容易一点。具体实现代码如下:
通过代码
复制代码
总结
上述算法的时间复杂度是 O(n * log n), 空间复杂度是 O(n)
这个题目出的很好,从实际现象结合 最长上升子序列算法,还考察了编程基础,建议多练习挤几次。掌握这种解法。
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/cf53b2e2c6fd72be51627cebd】。文章转载请联系作者。
评论