求元素和最大的子数组2

1.题目要求:由一中的链状数组变为环状数组

2.编程思路:

若数组为环状,将其从a[0]出断开,本质和一条链相同,只不过以前只能按顺序从前面往后相加,环状之后能够从尾部加到头部,所以只需要将此数组长度变为2倍,后面一半的数组元素与前面相同,然后即可按照前面所写的链状相同,只需要在while循环中加上一个限定条件:相加最大数组长度小于二分之一数组长度 即可。

3.源程序:

public class Max2 {
	public static void main(String [] args){
		int a[]={2,4,3,-9,9,9,-1};
		int b[]=new int[100];
		int n=a.length;
		for(int i=0;i<n;i++){
			b[i]=a[i];
			b[i+n]=a[i];
		}
		
		int Max[]=new int[10];
		Max[0] = 0;
		int i = 0;//数组下标
		int j = 0;//最大值数组下标
		int temp=0;//中间变量
		int q=1;//用于连续长度的计数
		while(q<a.length&&i<b.length){			    
				if(temp+b[i]>=Max[j])
				{
					temp=temp+b[i];
					Max[j]=temp;
					i++;
					q++;
				}
				else if(temp+b[i]<Max[j]&&temp+b[i]>0)
				{
					temp=temp+b[i];
					i++;
					q++;
				}
				else if(temp+b[i]<=0)
				{
				   i++;	
				   j++;
				   Max[j]=0;
				   temp=0;
				   q=1;
				}
			
		}
		int max = Max[0];
		for(int k=0;k<=j;k++){
			if(Max[k]>max)
			{
				max=Max[k];
			}
		}
		/*System.out.println(j);
		for(int k=0;k<=j;k++){
			System.out.println(Max[k]);
		}*/
		System.out.println("最大子数组和为"+max);
	}

}

4.运行结果截图:

学会改变,举一反三,你就能成为智者!

 

原文地址:https://www.cnblogs.com/xulei11-/p/6641459.html