返回一个整数数组中最大子数组的和——首尾相接

设计思路:

数组首尾相接的问题:初定一个四个值的数组:1 -1 3 9,通过首尾相接实际上求的数组就变为了一个加长版的数组:1 -1 3 9 1 -1 3 9

先用一个数组存储输入的数组的值,再用一个数组存储相加后的子数组和原先子数组的大的值,maxsum表示最大子数组的值,通过赋值,使数组从首位开始一次将值接到数组的尾巴处,进行到将原数组所有值都依次接到原数组尾巴处时停止,输出最大字数组值

代码:

package zuoye_03;

import java.util.Scanner;

public class shuzu3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a[] = new int[100];
        int sz[] = new int[100];
        int i,j,szgs1, maxsum;
        System.out.println("请输入数组元素个数:");
        int szgs = sc.nextInt();
        System.out.println("请输入数组元素:");
        for (i = 0; i < szgs; i++)
        {
            sz[i] = sc.nextInt();
        }
        a[0] = maxsum = sz[0];
        szgs1 = szgs;
        if (szgs>0)
        {
            for (j = 0; j < szgs; j++)
            {
                for (i = j + 1; i < szgs1; i++)
                {
                    a[i] = max(a[i - 1] + sz[i], sz[i]);
                    maxsum = max(maxsum, a[i]);
                }
                sz[szgs1] = sz[szgs1-szgs];
                a[j+1] = sz[szgs1-szgs+1];
                szgs1 =szgs1+ 1;
            }
        }
        System.out.println("最大子数组的和为:"+ maxsum );
    }

    private static int max(int i, int j) {
        // TODO 自动生成的方法存根
        if(i>=j) return i;
        else return j;
    }

}

感受:

拿到一个问题一定要分解成一个个小的问题,多多分解,一个大又麻烦的问题就成了一个个小的问题,再去解决的时候就会简单很多。

posted @ 2019-03-24 16:50  zhoulonghai  阅读(191)  评论(0编辑  收藏  举报