0

我正在我的类中编写一个名为 ArrayIntList 的方法。这个类有两个字段,一个 int 数组和一个 int size,它表示数组的长度。我在这里忽略了构造函数,直接转到我有问题的方法。我正在尝试编写的方法是longestSortedSequence,它将返回列表中最长排序整数序列的int 类型。例如,这将返回

[1, 3, 5, 2, 9, 7, -3, 0, 42, 308, 17] ---> 4,
[1, 2, 3, 4, 0, 19, 1, 1, 2, 2, 3, 3]----> 6

下面的代码适用于第一种情况,但在第二种情况下失败,我无法理解为什么。

public class ArrayIntList {
    private int[] elementData;
    private int size;



public int longestSortedSequence() {
    //this stores the longest sequence possible
    int max_count=0;
    //this stores the counts till not sorted sequence is encountered
    // and is flushed to zero before the next counting begins
    int count=0;
    int i=0;
    while(i<size-1) {
        if (elementData[i]<=elementData[i+1]){
            count++;
        }
        else {
            max_count=Math.max(max_count,count+1);
            count=0;
        }
        i++;
    }
    return max_count;
}

任何帮助将非常感激?谢谢

4

2 回答 2

2

max_count仅当您检测到序列的结尾(else分支)时才分配。

如果您的第二个示例,最长序列位于末尾(6),但您的代码永远没有机会分配给max_count.

将作业max_count移出else. 那么你的ifwill 也已经运行了,所以countwill 已经增加了,并且在比较时不需要添加1to 。countmax_count

于 2013-07-09T00:32:25.703 回答
1

更改的代码段:

    while(i<size-1) {
            if (elementData[i]<=elementData[i+1]){
                count++;
            }
            else {
                max_count=Math.max(max_count,count+1);
                count=0;
            }
            i++;
        }
// added following 1 line.
    max_count=Math.max(max_count,count+1);
        return max_count;
于 2013-07-09T00:33:35.397 回答