java求最大子序列

来源:互联网 发布:软件辅助工作室 编辑:程序博客网 时间:2024/06/06 16:13

题目解释:给定一个整数序列,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;i<data.length;i++){            if(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);
在网上看到好多,按照自己的想法,做了一下改进,凡事都要自己尝试一下嘛。

原创粉丝点击