环一维数组最大子数组问题

设计思路: 一个含有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循环,显得有些冗杂。
将大问题分解成能解决的小问题,是编程的一个重要思路。
在编程中,一定要注意数组的长度是否与你期望的所一致,避免不必要的调试。

  

posted @ 2015-04-17 09:21  twenty丶two  阅读(124)  评论(1编辑  收藏  举报