返回一个整数数组中最大子数组

package day_2;
import java.util.Scanner;
public class FindMaxArry {
public static int max(int ans, int i) {
// TODO Auto-generated method stub
int m;
if(ans>i)
m=ans;
else
m=i;
return m;
}
public static void main(String[] args) {
int[] a = new int[100];
int i,n;
System.out.println("输入数组元素个数");
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
System.out.println("请输入数组元素");
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=-10000;
for(i=1;i<=n;i++)
ans=max(ans,a[i]);
System.out.println(ans);
}
}


数组拓展,如数组是环型数组,求数组中最大子数组的和。要求是每个值只能取一次。
package day_2;
import java.util.Scanner;
public class FindMaxArry {
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号