def longest(num): #最长递增子序列 dp=[0]*len(num) for i in range(len(num)): dp[i]=1 for j in range(i): if num[j]<num[i] : dp[i]=max(dp[i],dp[j]+1) return max(dp) if dp else 0 a=[10, 9, 2, 5, 3, 7, 101, 18] print(longest(a)) def zuichang(num): #最长递增子数组 ma,n=0,0 for i in range(len(num)): if num[i-1] < num[i] or i==0 : n+=1 ma=max(ma,n) else: n=1 return ma a=[10,10, 9, 5, 3] print(zuichang(a))
def maxsumarray(arr): #子数组的最大累加和,并返回子数组的头尾 if not arr or len(arr)==0 : return 0 max_arr=arr[0] cur=0 start,end,s,e=0,0,0,0 for i in range(len(arr)): cur+=arr[i] if cur>max_arr: max_arr=cur e=i start=s end=e if cur<0: cur=0 e=i+1 s=i+1 print('start=%d,end=%d,sum=%d'%(start,end,cur)) return cur a=[1,4,5,-8,3,-7,6,10] print(maxsumarray(a))
def maxsumarray1(arr): if not arr or len(arr)==0 : return 0 max_arr=arr[0] cur=0 for i in range(len(arr)): cur+=arr[i] max_arr=max(max_arr,cur) if cur<0: cur=0 return cur