返回一个整数数组中最大子数组的和——课堂测试

题目:

 代码如下:

package day01;

import java.util.Scanner;

public class MaxArray {    

    public static int max(int i,int j) {
        int m;
        if(i>j)
            m=i;
        else 
            m=j;
        return m;        
    }
    public static void main(String[] args) {
        // TODO 自动生成的方法存根

         int i,n;
         
         int[] a = new int[100];
         Scanner sc = new Scanner(System.in);   //n个整数
         n=sc.nextInt();
         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=-100000;
            for(i=1;i<=n;i++)
                ans=max(ans,a[i]);      //先把第一个子数组和赋值给ans,在与下一个子数组和比较哪个更大,将大的刷新赋给ans,依次循环
        System.out.println(ans);
        sc.close();
    }

}

 测试结果截图:

 

 拓展:如数组为环型数组,求数组中最大子数组的和

要求:每个值只能取一次

代码如下:

package day01;

import java.util.Scanner;

public class FindMaxArray {

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

    }

}

 但是上面的解决方法与要求不服,数组中的值用了两次,及每次第i个值昨完判断后再赋值给length+i。所以现在还没有想到别的方法。

猜你喜欢

转载自www.cnblogs.com/tianwenjing123-456/p/12363637.html