题目:返回一个一维整数数组中最大子数组的和。
要求:
输入一个一维整形数组,数组里有正数也有负数。
一维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。
1》设计思想:
主要是在上一次的基础之上进行改进,这次是要进行一个环的最大子数组,所以说我的思路就是把这个环所有的数组情况都
复制另一个数组,每次将数组的数向后移一位,最后一位移到第一位,每次数组都求出一个最大值,然后比较最大值中的最大数,
他就是环的最大值。
import java.util.*;
/*
求最大子数组问题
要求数组中有正也有负数,如果全为负数,只需要找出
最大的负数即可。
*/
public class Shuzuhe {
public static void main(String[] args){
Scanner sc=new Scanner(System.in); //可以读出输入的数
int L;
System.out.println("请输入数组长度");
L=sc.nextInt();
int a[]=new int[L];//定义一个长为L 的数组,作为输入数组
int c[]=new int[L];
int sum1[]=new int[L];
int d=sum1[0];
System.out.println("请输入要进行处理的数(L个):");
for(int i=0;i<L;i++)//输入L个数
{
c[i]=sc.nextInt();
}
for(int j=0;j<L;j++)
{
for(int k=0;k<L;k++)
{
a[k]=c[(j+k)%L];
}
int sum=a[0];//用于记录和
int b=0;//用于每次运算,找最大子数组
for(int i=0;i<L;i++)
{
if(b<0)
{
b=a[i]; //如果b<0,将b移到加为负数那位的后一位
}
else
{
b+=a[i];
}
if(sum<b)
{
sum=b; //sum为当前最大子数组的和
}
sum1[j]=sum;
}
if(d<sum1[j])
{
d=sum1[j];
}
}
System.out.print("最大子数组和为:");
System.out.print(d);
}
}
/*
求最大子数组问题
要求数组中有正也有负数,如果全为负数,只需要找出
最大的负数即可。
*/
public class Shuzuhe {
public static void main(String[] args){
Scanner sc=new Scanner(System.in); //可以读出输入的数
int L;
System.out.println("请输入数组长度");
L=sc.nextInt();
int a[]=new int[L];//定义一个长为L 的数组,作为输入数组
int c[]=new int[L];
int sum1[]=new int[L];
int d=sum1[0];
System.out.println("请输入要进行处理的数(L个):");
for(int i=0;i<L;i++)//输入L个数
{
c[i]=sc.nextInt();
}
for(int j=0;j<L;j++)
{
for(int k=0;k<L;k++)
{
a[k]=c[(j+k)%L];
}
int sum=a[0];//用于记录和
int b=0;//用于每次运算,找最大子数组
for(int i=0;i<L;i++)
{
if(b<0)
{
b=a[i]; //如果b<0,将b移到加为负数那位的后一位
}
else
{
b+=a[i];
}
if(sum<b)
{
sum=b; //sum为当前最大子数组的和
}
sum1[j]=sum;
}
if(d<sum1[j])
{
d=sum1[j];
}
}
System.out.print("最大子数组和为:");
System.out.print(d);
}
}