L76 Longest Increasing Subsequence
Give an integer array,find the longest increasing continuous subsequence in this array.
An increasing continuous subsequence:
Can be from right to left or from left to right.
Indices of the integers in the subsequence should be continuous.
Notice
O(n) time and O(1) extra space.
Example
For[5, 4, 2, 1, 3]
, the LICS is[5, 4, 2, 1]
, return4
.
For[5, 1, 2, 3, 4]
, the LICS is[1, 2, 3, 4]
, return4
.
用一个以为的dp来记录到现在这个地方为止的最长递增subsequence。dp初始化为1,因为最短的LIS就是一个数字。每次都要go through前面一堆数字until现在的i。然后每当找到比现在数字小的j时,就更新dp。取dp与 [j] + 1中较大值。最后结果从dp数列中找max,因为max不一定是最后一个数字。T:O(n^2), S:O(n)。另外还能用nlogn的二分来做。
Last updated