Skip to content

Commit 26c302c

Browse files
committed
LIS
1 parent fce8438 commit 26c302c

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

300 Longest Increasing Subsequence.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
1111
Follow up: Could you improve it to O(n log n) time complexity?
1212
"""
13+
import bisect
14+
1315
__author__ = 'Daniel'
1416

1517

@@ -25,17 +27,14 @@ def lengthOfLIS(self, A):
2527

2628
n = len(A)
2729
MIN = [-1 for _ in xrange(n+1)]
28-
l = 1
29-
MIN[l] = 0
30-
for i in xrange(1,n):
31-
if A[i] > A[MIN[l]]:
32-
l += 1
33-
MIN[l] = i
34-
else:
35-
j = self.bin_search(MIN, A, A[i], 1, l+1)
36-
MIN[j] = i
30+
k = 1
31+
MIN[k] = A[0] # store value rather than index
32+
for v in A[1:]:
33+
idx = bisect.bisect_left(MIN, v, 1, k+1)
34+
MIN[idx] = v
35+
k += 1 if idx == k+1 else 0
3736

38-
return l
37+
return k
3938

4039
def bin_search(self, M, A, t, lo=0, hi=None):
4140
if not hi: hi = len(M)
@@ -121,4 +120,4 @@ def lengthOfLIS_dp(self, A):
121120

122121

123122
if __name__ == "__main__":
124-
print Solution().lengthOfLIS([10, 9, 2, 5, 3, 7, 101, 18])
123+
assert Solution().lengthOfLIS([10, 9, 2, 5, 3, 7, 101, 18]) == 4

0 commit comments

Comments
 (0)