usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication4{classProgram{staticvoidMain(string[]args){FindMaxAmountValuerr=newFindMaxAmountValue();//Randomr=newRandom();int[]list=newint[]{-22,-11,0,0,0,0};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}intmaxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue);list=newint[]{0,0,0,0};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}maxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue);list=newint[]{-22,-33,-1,-10};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}maxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue); list=newint[]{22,-33,-100,-10};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}maxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue); list=newint[]{22,-33,-100,-10,19,18,13,25,21};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}maxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue);list=newint[]{-22,-33,-100,-10,19,18,13,25,21};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}maxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue);list=newint[]{22,-33,-100,-10,19,18,13,25,21,-21};for(inti=0;i<list.Length;i++){Console.Write(list[i]+"");}maxTotalValue=0;rr.FindMaxA(list,outmaxTotalValue);Console.WriteLine("gotsubTotal:{0}",maxTotalValue);}} publicclassFindMaxAmountValue{///<summary>///找出它们的规律;///1.当没有正数时,只需要比较单个元素,它就是最大值///2.当有正数时,需要相加,但是每次加后,标记出最大值;并且若和为0或者负数时,总和清零;继续计算后面的。///时间复杂度是Q(n)。///</summary>///<paramname="list"></param>///<paramname="maxTotalValue"></param>///<returns>true,thatmeans,thatismaxsum,otherwise,nomaxsumvalue.</returns>publicboolFindMaxA(int[]list,outintmaxTotalValue){maxTotalValue=Int32.MinValue;intlen=list.Length;if(list==null||len<=0)returnfalse;//notcan'tfinditsmaximumvalue.//1.checkifnoneoftheminthelistarepositive--------------inti=0;for(;i<len;i++){if(list[i]>0){break;}else{if(list[i]>maxTotalValue){maxTotalValue=list[i];}}}//thereisnotanypositivenumberinthelist,returnit.if(i==len){returntrue;}//2.Therearepositivenumberinthelist,handleit--------------------------//weknowthelist[i]isgreaterthan0.intcurrentMaxTotalValue=0;for(;i<len;i++){currentMaxTotalValue=currentMaxTotalValue+list[i];if(currentMaxTotalValue>maxTotalValue){maxTotalValue=currentMaxTotalValue;}if(currentMaxTotalValue<0){currentMaxTotalValue=0;}}returntrue;}}}