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

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();
    

    }

}

  

但是这个方法不符合要求,不能满足每个元素只能用一次的要求。

原文地址:https://www.cnblogs.com/dixingchen/p/13058924.html