求数组中的最大子串和

描述

给定一个数组,求得这个数组中最大的字串和:
例如:

        int[] arr = {1, -2, 3, 5, -2, 6, -1};

其中最大和的字串为:

3, 5, -2, 6

思路:

开始拿到这种题目的时候会想到暴力解决的方法,即遍历所有子数组的情况,虽然也能解决,但是这样解决复杂度为O(n^2)所以想了另外一种想法;

  • 遍历这个数组,设置一个初始值sum存放第一个元素,每次遍历的时候判断这个数是否是大于0的,如果是,就可能为后面的数做出贡献,于是就将其保存下来,并将本轮数据相加,在这过程中不断维护一个最大的数;最终求得这个最大的数。

代码:


public class 最大子数组 {
    public static void main(String[] args) {
        int[] arr = {1, -2, 3, 5, -2, 6, -1};
        int max = gatMax(arr);
        System.out.println(max);
    }

    //3,5,-2,6
    private static int gatMax(int[] arr) {
        int sum = arr[0];
        int max = sum;
        //如果当前一个加上后一个的数字为大于0就将其带上,并和后面的数字下相加是否最大,并动态的保存当前最大的
        //如果是小于零的就将其区间移动到下一处
        for (int i = 1; i < arr.length; i++) {
            if (sum > 0) {
                sum += arr[i];
            }else{
                sum = arr[i];
            }

            //维护最大的数
            if(max < sum){
                max = sum;
            }
        }

        return max;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_38116774/article/details/88555407