##’’‘最长连续子序列’’’
def findmax(nums):
maxnum = 1
curr = 1
for i in range(len(nums)-1):
if nums[i] < nums[i+1]:
curr += 1
else:
maxnum = max(maxnum,curr)
curr = 1
return max(maxnum,curr)
##’’‘最长递增子序列个数’’’
输入:[1,2,4,5,7,3,9,8,10]
输出:5 [1,2,4,5,7]
def findmaxnum(nums):
maxnum = 1
curr = 1
num = []
for i in range(len(nums)-1):
if nums[i] < nums[i+1]:
curr += 1
else:
num.append(curr)
maxnum = max(maxnum,curr)
curr = 1
num.append(curr)
return len([i for i in num if i == max(num)])
##’’‘最长递增子序列 ‘’’
法1
class Solution:
def lengthOfLIS1(self, nums):
res = []
for num in nums:
if not res or num>res[-1]:
res.append(num)
else:
l=0
r=len(res)-1
while l<r:
mid = (l+r)//2
if res[mid]<num:
l = mid+1
else:
r = mid
res[l] = num
return len(res)
法2
class Solution:
def lengthOfLIS2(self, nums):
if not nums:
return 0
dp = [1] * len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
##最长连续递增子序列长度
输入:[1,2,3,4,5,7,8,10,11,14]
输出:5 [1,2,3,4,5]
法1
class Solution:
def longestConsecutive2(self,nums):
nums = set(nums)
res = 0
for i in nums:
if i-1 not in nums:
y = i + 1
while y in nums:
y += 1
res = max(res, y - i)
return res
法2
def findlcis(alist):
n=0
res=0
for i in range(len(alist)):
if alist[i]>alist[i-1]:
n+=1
res=max(res,n)
else:
n=1
return res