数组中最大后序数的总和

时间:2010-10-07 07:20:59

标签: java

给定这个数组

int [] myArray = {5,-11,2,3,14,5,-14,2};

您要在未排序的整数数组中找到任何下序列中值的最大总和。如果数组的长度为零,则maxSeqValue必须返回Integer.MIN_VALUE。

你应该打印数字19,因为最大总和的后序是14,5。 下序数是一系列不增加的数字。

这些是我使用的代码,但我想有些情况仍然没有考虑到。 任何想法,提前谢谢。

public class MaxDownSequence{
public int maxSeqValue(int[] a){
    int sum=Integer.MIN_VALUE;
    int maxsum=Integer.MIN_VALUE;
   for (int i=1;i<a.length;i++){
        if(a[i]<a[i-1]){
            sum = a[i] + a[i-1];
            if (sum>maxsum){
                maxsum=sum;
            }
        }
        else {
            sum=a[i];
            if (sum>maxsum){
                maxsum=sum;
            }
        }
   }
   if (a.length==0){
       return Integer.MIN_VALUE;
   }
   else{
       return maxsum;

   }
}
public static void main(String args[]){
    MaxDownSequence mySeq = new MaxDownSequence();
    int [] myArray = {5,-11,2,3,14,5,-14,2};
    System.out.println(mySeq.maxSeqValue(myArray));
}

}

5 个答案:

答案 0 :(得分:0)

  1. 您没有考虑过两个以上数字的序列。如果您有[3,2,1],则结果应为6。但是你的代码会给5,因为它只查看当前数字和前一个数字的总和,而你应该跟踪当前的下行顺序,并将当前数字添加到该下行序列的运行总数中。一旦您点击了一个数字,如果需要,可以打破后续更新maxsum,然后将运行总计重置为0

  2. 不确定为什么你在循环中有其他?如果a[i]不小于a[i-1],那么它不是一个后果,因此肯定maxsum不应该更新。如果只取样样数组中的前3个数字,则返回数字2。因为第一个下降序列[5,-11]会给出-6的总和,并且在下一次迭代中,它只会查看2,它大于-6因此maxsum }已更新。

  3. 无需:

    if (a.length==0){
       return Integer.MIN_VALUE;
    }
    

    如果数组长度为0,那么你永远不会进入循环,因此永远不会改变maxsum,因此它仍然等于Integer.MIN_VALUE,所以无论如何你都可以在最后返回maxsum。

答案 1 :(得分:0)

获取输入{3,2,1}答案应为6您的计划5

你的方法是正确的,每次你在数组中测试一个数字,你检查它是否小于(实际上这应该是<=)之前的数组元素。

如果是,则将总和更新为:sum = a[i] + a[i-1];这是不正确的。程序中的sum表示当前子序列的运行朗姆酒。你不应该覆盖它。

答案 2 :(得分:0)

动态编程是最佳选择。

我知道,也许这根本没有帮助,但由于我不想为你的问题发布解决方案,我能做的最好的事情就是给你这个提示:)

答案 3 :(得分:0)

我认为你想要一笔运行金额。含义Sum = Sum + A [i]。只需确保将总和初始化为数组的第一个成员即可开始营业。

答案 4 :(得分:0)

package sree;

import java.util.ArrayList;
import java.util.List;

import javax.lang.model.element.NestingKind;

public class MaximumSumSequence {

    private final int[] theArray;

    private MaximumSumSequence(int[] theArray) {
        this.theArray = theArray;
    }

    private void maximumSequence() {

        int  currentMax = 0,currentSum = 0, start = 0, end = 0, nextStart = 0;
        for (int i=0; i< theArray.length; i++) {

            currentSum += theArray[ i ];

            if (currentMax < currentSum) {
                currentMax = currentSum;
                start = nextStart;
                nextStart = end;
                end = i;
            } else if (currentSum < 0) {
                currentSum = 0;
            }
        }

        System.out.println("Max Sum :" + currentMax);
        System.out.println("Start :" + start);
        System.out.println("End :" + end);

    }

    public static void main(String[] args) {
        //int[] anArray = {4, -1, 2, -2, -1, -3};
        int[] anArray ={-2, 1, -3, 4, -1, 2, 1, -5, 4};
        new MaximumSumSequence(anArray).maximumSequence();
    }
}