环一维数组最大子数组问题
设计思路: 一个含有n个数值的一维环数组。可以把他分为n个一维数组,分别求出这n个以为数组的最大值。然后他这些值放在另一个一维数组中。再比较,求出最大子数组。
代码:
package 整数环数组最大子数组的和;
import java.util.Random;
import java.util.Scanner;
public class one {
public static void main(String[] args) {
// TODO 自动生成的方法存根
System.out.print("请输入数组的长度:");
Scanner sr=new Scanner(System.in);
int num=sr.nextInt();
int [] sz =new int[num];
long [] max =new long[num];
Random a=new Random (num);
System.out.println("随机产生的数组为:");
for (int i=0;i<num;i++)
{
sz[i]=a.nextInt(200)-100;
System.out.print(sz[i]+" ");
}
System.out.println();
long maxsum=0;
long left=0;
for(int j=1;j<=num;j++)
{
maxsum=sz[j-1];
left=sz[j-1];
for(int l=j;l<num+j-1;l++)
{
if(left<0)
{
left=sz[l%num];
}
else{
left+=sz[l%num];
}
System.out.println("left maxsum "+left+" "+maxsum);
maxsum=getmax(left,maxsum);
}
max[j-1]=maxsum;
System.out.println(max[j-1]);
}
for(int n=0;n<num;n++){
maxsum=getmax(max[n],maxsum);
}
System.out.println("最大子数组的值为:"+maxsum);
}
private static long getmax(long a, long b) {
// TODO 自动生成的方法存根
return a>b? a:b;
}
}
实验截图:

反思:
在设计程序中。用了两个for循环,显得有些冗杂。
将大问题分解成能解决的小问题,是编程的一个重要思路。
在编程中,一定要注意数组的长度是否与你期望的所一致,避免不必要的调试。
浙公网安备 33010602011771号