的最大的一笔非递减顺序 [英] Largest sum of non-decreasing up sequence

查看:115
本文介绍了的最大的一笔非递减顺序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如。 -3,6,11,13,5,-11,4,7,8最大的一笔= 30(6,11,13原因加入-3将使之更小)

如。 7,0,-3最大的一笔= 7

如4,-1,45最大的一笔= 45

例如-3 - , - 2,-6,0最大的一笔= 0

需要一些建议对我的code,仍马车

  INT maxSum = Integer.MIN_VALUE的;
    INT总和= 0;
    INT checkNeg = Integer.MIN_VALUE的;    的for(int i = 0; I<则为a.length;我++){
        如果(一个[Ⅰ]≥checkNeg){
            checkNeg =一个由[i];
        }
    }    如果(checkNeg&下; = 0){
        maxSum = checkNeg;
    }    如果(checkNeg大于0){
        的for(int i = 0; I<则为a.length;我++){
            如果(一个由[i]!= 0){
                总和+ = a [i];
                如果(总和> maxSum){
                    如果(ⅰ!= 0){
                        如果(一个[Ⅰ]≥=一个[I - 1]){
                            maxSum =总和;
                        }其他{
                            总和=一个由[i];
                        }
                    }其他{
                        maxSum =总和;
                    }
                }
                如果(总和℃,){
                    总和= 0;
                }
            }其他{
                总和= 0;
            }
        }
    }
    返回maxSum;


解决方案

试试这个

  INT maxSum = Int32.MinValue;
        INT总和= 0;            的for(int i = 0; I<则为a.length;我++)
            {
                如果(一个[Ⅰ]≥= 0)
                {
                    总和+ = a [i];
                    maxSum = Math.Max​​(总和,maxSum);                    如果(第(i + 1&下;则为a.length)及及(一个第[i + 1];一个由[i]))
                        总和= 0;
                }
                其他
                {
                    maxSum = Math.Max​​(一个由[i],maxSum);
                    总和= 0;
                }
            }        返回maxSum;

似乎所有的例子和其他几个工作。

有不需要'checkNeg',此检查应该算法出一点更自然

eg. -3,6,11,13,5,-11,4,7,8 largest sum =30 (6,11,13 cause adding -3 will make the sum smaller)

eg. 7,0,-3 largest sum = 7

eg 4,-1,45 largest sum = 45

eg -3-,-2,-6,0 largest sum =0

Need some advise for my code, still buggy

    int maxSum = Integer.MIN_VALUE;
    int sum = 0;
    int checkNeg = Integer.MIN_VALUE;

    for (int i = 0; i < a.length; i++) {
        if (a[i] > checkNeg) {
            checkNeg = a[i];
        }
    }

    if (checkNeg <= 0) {
        maxSum = checkNeg;
    }

    if (checkNeg > 0) {
        for (int i = 0; i < a.length; i++) {
            if (a[i] != 0) {
                sum += a[i];
                if (sum > maxSum) {
                    if (i != 0) {
                        if (a[i] >= a[i - 1]) {
                            maxSum = sum;
                        } else {
                            sum = a[i];
                        }
                    } else {
                        maxSum = sum;
                    }
                }
                if (sum < 0) {
                    sum = 0;
                }
            } else {
                sum = 0;
            }
        }
    }
    return maxSum;

解决方案

Try this

        int maxSum = Int32.MinValue;
        int sum = 0;

            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] >= 0)
                {
                    sum += a[i];
                    maxSum = Math.Max(sum, maxSum);

                    if ((i+1<a.Length) && (a[i+1] < a[i]))
                        sum = 0;
                }
                else
                {
                    maxSum = Math.Max(a[i], maxSum);
                    sum = 0;
                }
            }

        return maxSum;

seemed to work for all your examples and a couple of others.

There is no need for 'checkNeg', this check should come out of the algorithm a little more naturally

这篇关于的最大的一笔非递减顺序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆