package Algorithm;
import java.io.*;
import java.util.Random;
public class Algorithm_MaxSequence
{
public static void main(String[] ars)
{
ReadFileData readFileData = new ReadFileData(20);
readFileData.readTxtData();
readFileData.FindMaxSequence();
readFileData.getResult();
}
}
class ReadFileData
{
int[] arrayNumber;
int length;
int maxValue;
ReadFileData(int len)
{
this.length = len;
arrayNumber = new int[this.length];
this.maxValue = 0;
}
public void readTxtData()
{
String filepath = System.getProperty("user.dir");
filepath+="\\maxsequence.txt";
try
{
File file = new File(filepath);
FileReader fr = new FileReader(file);
BufferedReader bReader = new BufferedReader(fr);
int count=0;
while(bReader.ready()&&count<this.length)
{
arrayNumber[count]=Integer.valueOf(bReader.readLine());
System.out.println(arrayNumber[count]);
count++;
}
/*for(int i=0;i<this.length;i++)
{
System.out.println(arrayNumber[i]);
}*/
bReader.close();
fr.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void getResult()
{
System.out.println("maxSequence= "+this.maxValue);
}
public void FindMaxSequence()
{
this.maxValue = maxSumRecuse(arrayNumber, 0, this.length-1);
}
public int maxSumRecuse(int[] a, int left,int rigth)
{
if(left==rigth)
{
if(a[left]>0)
return a[left];
else
return 0;
}
int center = (left+rigth)/2;
int maxLeftSum = maxSumRecuse(a, left, center);
int maxRightSum = maxSumRecuse(a, center+1, rigth);
int maxLeftBorderSum =0,leftBorderSum =0;
for(int i=center;i>=left;i--)
{
leftBorderSum+=a[i];
if(leftBorderSum>maxLeftBorderSum)
maxLeftBorderSum = leftBorderSum;
}
int maxRightBorderSum=0,rightBorderSum=0;
for(int i =center+1;i<=rigth;i++)
{
rightBorderSum+=a[i];
if(rightBorderSum>maxRightBorderSum)
maxRightBorderSum = rightBorderSum;
}
return max3(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum);
}
public int max3(int maxleftsum,int maxrightsum,int maxbordersum)
{
return maxleftsum>maxrightsum ? maxleftsum:(maxrightsum<maxbordersum ? maxbordersum:maxrightsum);
}
}