📣 独立日限时特惠: VIP通行证立减$68
查看: 2422| 回复: 1
跳转到指定楼层
上一主题 下一主题
收起左侧

[数组] longest increasing subsequence 马甲系列汇总

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
LIS有很多马甲题:
300. Longest Increasing Subsequence
646. Maximum Length of Pair Chain
354. Russian Doll Envelopes

其中我觉得646 这个马甲穿的尤其漂亮。 大家还有什么补充的吗? 吐槽和炫技都热烈欢淫

评分

参与人数 1大米 +3 收起 理由
14417335 + 3 很有用的信息!

查看全部评分


上一篇:关于Binary tree recursion的空间复杂度问题
下一篇:study progress for the ctci 189
全局:
对于646,我有一个borrow 300 idea的想法,不过复杂度还是nlogn,没有标答里的解法2简洁。
假设我们有一个class叫tuple,定义如下,这里用python来prototype:
class my_tuple(object):
    def __init__(self, lo, hi, count):
        self.lo = lo
        self.hi = hi
        self.count = count # maintain the longest length count so far including this element
   
    def __lt__(self, other): # comparator, compare this object based on second element
        return self.hi < other.hi

为了讨论方便,假设我们每一个pair是(A,B)
initialize dp array,和LC300一样,我们称之为dp,我们称这里的pair array为pairs
首先sort pairs by 1st element of each pair
然后iterate through sorted pair array。其间对于每一个元素,首先用A构建my_tuple(dummy, A, dummy)的object,找其适合的插入位置,这里目的是将第一个元素和dp里面的第二个元素比
找到该位置之后,找其之前位置里面所有元素中最大的count值,则当前元素的count值为其+1,此时更新max_count
最后将当前元素的tuple object插入dp,根据第二个元素来插

这里的难点是“找其之前位置里面所有元素中最大的count值”,可以转化为find max element in prefix,用线段树可以做到每次操作logn
所以整个算法复杂度是nlogn

不过感觉绕了很多弯子,没有标答的nlogn简洁

我这种想法有种脱裤子放屁的感觉

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表