您当前的位置: 首页 > 

IT之一小佬

暂无认证

  • 0浏览

    0关注

    1192博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

马戏团人塔

IT之一小佬 发布时间:2021-08-20 22:21:29 ,浏览量:0

有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。出于实际和美观的考虑,在上面的人要比下面的人矮一点且轻一点。已知马戏团每个人的身高和体重,请编写代码计算叠罗汉最多能叠几个人。

示例:

输入: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)
        

关注
打赏
1665675218
查看更多评论
立即登录/注册

微信扫码登录

0.0456s