最长递增子序列问题LIS(Python语言实现)

额外建立一个递增的序列end,对遍历中的每一个元素通过二分搜索的方式找到应该放入的位置。时间复杂度为O(nlgn)。

from bisect import bisect


def longest_inc_sub(seq):
    end = []
    for su in seq:
        idx = bisect(end, su)
        if idx == len(end):
            end.append(su)
        else:
            end[idx] = su
    return len(end)


nums = [10, 6, 19, 23, 31, 20, 8]
print(longest_inc_sub(nums))

(最近更新:2019年09月03日)

你可能感兴趣的:(PROGRAM)