/*
*Copyright(c) 2011,烟台大学计算机学院学生
*All rights reserved.
*文件名称:求子数组的最大值
*问题描述:输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,
因此输出为该子数组的和18。
*作 者:Mr_chang
*完成日期: 2012年 12月17 日
*/
//方案一O(N^3)**********************************************************
package test;
public class ZiChuanSum02
{
/**
*O(N^2)
*/
public static void main(String[] args)
{
int[] s=new int[]{1,2,3,-4,5,-6,7,7,7,5,5,-5,8,-9,-13,-88,5,-90};
maxSubsequeceSun(s);
}
public static void maxSubsequeceSun(int[] s)
{
int startIndex=0;
int endIndex=0;
int maxSum=0;
for(int i=0;i<s.length;i++)
{ int thisSum=0;
for(int j=i;j<s.length;j++)
{
thisSum+=s[j];
if(thisSum>maxSum)
{
maxSum=thisSum;
startIndex=i;
endIndex=j;
}
}
}
System.out.println(maxSum+"and the startIndex is "+startIndex+" and the endIndex is"+endIndex);
}
}
//方案二O(N^2)**********************************************************
package test;
public class ZiChuanSum02
{
/**
*O(N^2)
*/
public static void main(String[] args)
{
int[] s=new int[]{1,2,3,-4,5,-6,7,7,7,5,5,-5,8,-9,-13,-88,5,-90};
maxSubsequeceSun(s);
}
public static void maxSubsequeceSun(int[] s)
{
int startIndex=0;
int endIndex=0;
int maxSum=0;
for(int i=0;i<s.length;i++)
{ int thisSum=0;
for(int j=i;j<s.length;j++)
{
thisSum+=s[j];
if(thisSum>maxSum)
{
maxSum=thisSum;
startIndex=i;
endIndex=j;
}
}
}
System.out.println(maxSum+"and the startIndex is "+startIndex+" and the endIndex is"+endIndex);
}
}
//方案3,O(N)**********************************************************
package test;
public class ZiChuanSum
{
public static void main(String[] args)
{
int[] s=new int[]{1,2,3,-4,5,-6,7,7,7,5,5,-5,8,-9,-13,-88,5,-90};
maxSubsequeceSun(s);
}
public static void maxSubsequeceSun(int[] s)
{
int startIndex=0;
int endIndex=0;
int thisSum=0;
int maxSum=0;
int i=0;
for(int j=0;j<s.length;j++)
{ thisSum+=s[j];
if(thisSum>maxSum)
{
maxSum=thisSum;
startIndex=i;
endIndex=j;
}
else if(thisSum<=0)
{
thisSum=0;
i=j+1;
}
}
System.out.println(maxSum+" and the startIndex is :"+startIndex+" and the endIndex is "+endIndex);
}
}
求子数组的最大值
最新推荐文章于 2020-12-17 06:01:46 发布