返回一个一维整数数组中最大子数组的和

设计思想:在原来最大数组的基础之上,将数组先扩展为原来的两倍就是将原来的数组复制然后连接到后面。再进行输入数字个数次循环,每次循环都扫描起点后输入数字个数个数字。计算数组和,并不断更新最大数组合

程序源代码:

package test;

import java.util.Scanner;

public class Test {
    public static void main(String[] args)
    {
        Scanner in=new Scanner(System.in);
        System.out.print("请输入数组长度:");
        int l=in.nextInt();//用户输入数组长度
        
        int[] shuzu =new int [l*2];
        int number_hezuidazhi=0;
        

        System.out.println("请依次输入数字");
        for(int i=0;i<l;i++)
        {
            shuzu[i]=in.nextInt();
            shuzu[i+l]=shuzu[i];
        }
        
        int number_he=shuzu[0];
        
        for(int m=0;m<l;m++)//进行输入数字个数次循环
        { 
            for(int n=m;n<m+l;n++)//每次向后扫描输入数字个数的数字
            {
                number_he = number_he + shuzu[n];
            
                if(number_hezuidazhi<number_he)//如果数组和大于最大数组和,则更新
                {
                    number_hezuidazhi=number_he;
                }
            
                if(number_he<0)//如果数组和为小于零,那么抛弃从零开始
                {
                    number_he=0;
                }
            }
            number_he = 0;//一次循环更新一次数组和
        }
        System.out.println("最大数组和为"+ number_hezuidazhi);
        in.close();
    }

}

结果截图:返回一个一维整数数组中最大子数组的和

结果分析:输入-1 2 3 -4 6

那么在这个首尾相连的数组中,应该是抛弃-4其他所有数字组成的集合最大。

程序中将数组变为-1 2 3 -4 6 -1 2 3 -4 6

第一次扫描(-1 2 3 -4 6 )-1 2 3 -4 6

第二次扫描 -1 (2 3 -4 6 -1) 2 3 -4 6

。。。。

每次都是上次最大数组的算法

总结:程序时间复杂度变成O(n*n);没有办法一次实现,就将数组变化进行多次遍历。