开始看网易公开课中的数据结构了,于是就打算写一些记录
1 int MaxSubseqSum1(int A[],int N) //时间复杂度 T(N)=O(N*N*N) 2 { 3 int thisSum,maxSum=0; 4 for(int i=0;i<N;i++)//i 是子列的左端 5 { 6 for(int j=i;j<N;j++)// j 是子列的右端 7 { 8 thisSum=0; //是从A[i]到A[j]的子列和 9 for(int k=0;k<=j;k++) 10 { 11 thisSum+=A[k]; 12 if(thisSum>maxSum)//如果得到的这个子列和更大 13 { 14 maxSum=thisSum;//则更新结果 15 } 16 } 17 } 18 } 19 return maxSum; 20 } 21 22 23 int MaxSubseqSum2(int A[],int N) //时间复杂度 T(N)=O(N*N) 24 { 25 int thisSum,maxSum=0; 26 for(int i=0;i<N;i++)//i 是子列的左端 27 { 28 thisSum=0; 29 for(int j=i;j<N;j++)// j 是子列的右端 30 { 31 thisSum+=A[j]; 32 if(thisSum>maxSum) 33 { 34 maxSum=thisSum; 35 } 36 } 37 } 38 39 return maxSum; 40 } 41 42 43 int MaxSubseqSum3(int A[],int N) 44 { 45 //分而治之,运用递归的思想,视频中没有代码,我也就先跳过吧。。。 46 } 47 48 int MaxSubseqSum4(int A[],int N) //运用在线处理的思想 49 { 50 int thisSum,maxSum=0; 51 for(int i=0;i<N;i++) 52 { 53 thisSum+=A[i]; 54 if(thisSum>maxSum) 55 { 56 maxSum=thisSum; 57 } 58 else if(thisSum<0)//若当前和小于0,那么就不可能使后面的总和增大,弃之 59 { 60 thisSum=0; 61 } 62 } 63 return maxSum; 64 }
晚安,好梦!