额外建立一个递增的序列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日)