有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。
示例:
输入:height = [65,70,56,75,60,68] weight = [100,150,90,190,95,110]
输出:6
解释:从上往下数,叠罗汉最多能叠 6 层:(56,90), (60,95), (65,100), (68,110), (70,150), (75,190)
示例代码:
class Solution:
def bestSeqAtIndex(self, height: List[int], weight: List[int]) -> int:
lst = []
for i, j in zip(height, weight):
lst.append([i, j])
lst.sort(key=lambda x: (x[0], -x[1]))
n = len(height)
nums = [i[1] for i in lst]
dp = []
for i in range(n):
# 如果新数比末尾数大,直接append
if not dp or nums[i] > dp[-1]:
dp.append(nums[i])
# 如果新数没有末尾数大,寻找第一个比新数小的数d[k],并更新d[k] = nums[i]
else:
left, right = 0, len(dp) - 1
while left = nums[i]:
right = mid - 1
else:
left = mid + 1
if left < len(dp):
dp[left] = nums[i]
return len(dp)