最大连续子列和问题(2)

作为之前问题的升级版,我们现在不仅需要求出最大子列和,而且需要返回该结果的起始和结束下标,因为最大子列和结果不唯一,我们需要返回最小的下标。

比如输入-10 1 2 3 4 -5 -23 3 7 -21
最大子列和是10,子列和为10的子列有1,4和7,8.那我们返回"10 1 4"。如果数组中所有的数都为负数,那么返回"0 0 结束Index"。

我们仍然使用在线处理的算法,因为和结果不唯一并且需要找到最小起始下标的那一组,我们只要倒序遍历即可,算法复杂度仍然是O(n)

    public String findMaxSubsequenceSum(int[] request){
        int currentSum = 0;
        int maxSum = Integer.MIN_VALUE;
        int step = 0;
        int endIndex = 0;
        int startIndex = 0;
        boolean allNegtive = true;
        for (int i = request.length - 1; i >= 0; i--) {
            if(request[i] > 0){
                allNegtive = false;
            }
            currentSum += request[i];
            if(currentSum < 0){
                currentSum = 0;
                step = 0;
            }else{
                step ++;
            }
            if(maxSum <= currentSum){
                maxSum = currentSum;
                startIndex = i;
                endIndex = startIndex + step - 1;
            }
        }
        return allNegtive ? "0 0 " + (request.length - 1) : maxSum + " " + startIndex + " " + endIndex;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 当教师近两年, 什么样的激励才最有效呢?关于这个问题,我思索良久。只到有一天无意间翻出了大学时代的一张过奖...
    郭文轩阅读 395评论 0 1
  • 人生,是一场修行。修行,就是宽容。容得下别人的中伤,忍得住困苦的折磨,放得下挽留不了的美好。 心里放不过自己,是没...
    P尐c阅读 409评论 0 1
  • 成本除以流量得到流量成本,电商的流量成本随着竞价排名的费用升高而逐渐趋近于线下成本。因此电商并不是一种更优的销售模...
    显微无间阅读 94评论 0 0
  • 说实话,一直想找到自己在世界上存在的价值。 不管是工作中,还是生活中,我对价值的定义就是“被需要的”,“不可替...
    大脸猫爱吃橙子阅读 237评论 2 1