java求最大子序列

题目解释:给定一个整数序列,a0, a1, a2, …… , an(项可以为负数),求其中最大的子序列和。如果所有整数都是负数,那么最大子序列和为0;

例如:对于序列-2, 11, -4, 13, -5, –2。 所求的最大子序列和为20(从11到13,即从a1到a3)。

/**
 * Created by ShoppingChen on 2017/9/5.
 */

public class MaximumSequence {
    private int[] data = new int[]{-2,11,-4,13,-5,-2};
    public MaximumSequence(){
        Log.d("MaximumSequence",getMaximumSequence()+"");
    }

    public int getMaximumSequence(){
        int result = 0;
        int resultMax = result;
        int cache = 0;
        boolean isHead = true;
        for(int i = 0;iif(isHead){
                if(data[i]<=0){//过滤掉 第一个 和后边连续较大的 负数
                    continue;
                }else{
                    //第一次遇到正数,即为临时最大子序列的值
                    isHead=false;
                    resultMax = data[i];
                    result = data[i];
                    continue;
                }
            }
            if(data[i] >= 0){
                result += data[i];
                resultMax = (result>resultMax) ? result:resultMax;
            }else{
                cache = result+data[i];
                if(cache < 0){//如果相加值为负数,则直接跳出,重走流程
                    isHead = true;
                    result = 0;
                    continue;
                }else {
                    result = cache;
                }
            }
        }
        return resultMax;
    }
}

时间复杂度为 O(n);
在网上看到好多,按照自己的想法,做了一下改进,凡事都要自己尝试一下嘛。

你可能感兴趣的:(算法)