返回整数数组中最大子数组的和——课堂作业

package text01;
import java.util.Scanner;
public class MaxArray {
public static int max(int i,int j) {
int m;
if(i>j)
m=i;
else
m=j;
return m;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int i,n;
int[] a = new int[100];
Scanner sc = new Scanner(System.in); //n个整数
n=sc.nextInt();
for(i=1;i<=n;i++)
a[i]=sc.nextInt();
for(i=2;i<=n;i++)
{
if(a[i]+a[i-1]>a[i]) //如果这个数加上前面数之和大于这个数,那么这就是一个连续的子数组
a[i]=a[i]+a[i-1];
}
int ans=-100000;
for(i=1;i<=n;i++)
ans=max(ans,a[i]); //先把第一个子数组和赋值给ans,在与下一个子数组和比较哪个更大,将大的刷新赋给ans,依次循环
System.out.println(ans);
sc.close();
}
}


2.如数组为环型数组,求数组中最大子数组的和。不要求时间复杂度。
package text02;
import java.util.Scanner;
public class FindMaxArray {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int length;//定义数组长度length
int n;//定义变化后的数组的长度
System.out.println("请输入数组元素个数");
Scanner sc = new Scanner(System.in);
length=sc.nextInt();
n=2*length;
int[] a = new int[n];
System.out.println("请输入数组中的元素:");
for(int i=0;i<length;i++)
{
a[i] = sc.nextInt();
}
int max=a[0];
int s=0;//定义求和后的元素
for(int i=0;i<length;i++)
{
s=0;
for(int j=i;j<length+i;j++)
{
s=s+a[j];
if(s>max)
{
max=s;
}
}
a[length+i]=a[i]; //每次将已经计算过的数放到最后
}
System.out.println("最大子数组的和为:"+max);
sc.close();
}
}

浙公网安备 33010602011771号