题目:
dp算法的时间复杂度n^2,满足题目要求。
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if nums==[]:
return 0
n=len(nums)
dp=[1]*n
for i in range(n-1):
for j in range(i+1):
if nums[j]<nums[i+1]:
dp[i+1]=max(dp[i+1],dp[j]+1)
return max(dp)
进阶算法:通过二分查找来做
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
def search(a, arr):
n = len(arr)
left = 0
right = n-1
while left <= right:
mid = (left + right ) // 2
if arr[mid] > a:
right = mid-1
elif arr[mid] < a:
left = mid+1
else:
return mid
return left
if nums==[]:
return 0
n = len(nums)
arr = []
arr.append(nums[0])
length = 1
flag = 0
for i in range(1, n):
if nums[i] > arr[length - 1]:
arr.append(nums[i])
length += 1
else:
flag = search(nums[i], arr)
arr[flag] = nums[i]
return length