求最大子数组

要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)

设计思想:

数组中有正有负,子数组的和最大值就不一定是元素个数最多的那个子数组。所以开始从0遍历,先求两个元素的子数组的最大值,然后以此类推,通过比较,if判断,把最大值赋给max。

代码:

import java.util.Scanner;

public class shuzu {

    public static void main(String[] args) {     

        Scanner scanner=new Scanner(System.in);

        System.out.println("请输入数字的数量:");

        int n=scanner.nextInt();

        int[] a=new int[n];

        System.out.println("请输入数组的数值:");

        for(int i=0;i<n;i++){

            a[i]=scanner.nextInt();

        }

        for(int i=1;i<n;i++){

            if(a[i]+a[i-1]>a[i])

                a[i]=a[i]+a[i-1];

        }

        int ans=-1000;

        for(int i=0;i<n;i++)

        {

            if(a[i]>ans)

                ans=a[i];//找取最大值

        }

        System.out.println(ans);

    }

}

截图:

 

 

 

 总结:

求一个最大子数组和,看似简单,其实不然。通过这个实验,练习了算法。我觉得算法难的地方是思路,思路清晰了写起来会好很多。

posted @ 2020-02-27 19:33  树某人  阅读(211)  评论(0编辑  收藏  举报