0

以下方法应返回整数列表中最长排序序列的长度。例如,如果一个名为 list 的变量存储以下值序列:{11,12,30,41,5,3,7,6},它应该返回4

当最长的排序序列从前面开始时,此方法未通过测试(它返回3),但它适用于其他测试。有谁知道问题出在哪里?谢谢你。

public int longestSortedSequence() {

    int count = 0;
    int max1 = 0;
                int max2 = 0;

    for (int i = 0; i < size; i++) {
        if (elementData[i] <= elementData[i + 1]) {
            count++;
            if (count >= max1) {
                max1 = count;

            }
        } else if (elementData[i] > elementData[i + 1]) {
            count = 0;
            count++;
            if (count >= max2) {
                max2 = count;
            }
        }
    }
    return Math.max(max1, max2);
}
4

2 回答 2

1

两条评论:

  1. 对于 each i,您正在测试元素是否i+1继续当前的非递减序列。因此,在循环的第一次迭代之前,您应该已经将元素 0 计为属于当前非递减序列;在第一次迭代中,您测试元素 1 是否继续该序列。这意味着count应该在开始时设置为 1。

  2. 您的代码可能会在 for 循环的最后一次迭代中抛出 ArrayIndexOutOfBoundsException,因为i+1大小相等,这不是数组的有效索引。

于 2013-02-24T23:42:03.780 回答
0
  • 我猜你问题中的代码有很多复制粘贴。例如 if (count>=max)零件。

  • 您的代码可能会抛出IndexOutOfBoundExcep.,因为您e[i+1]在循环中阅读并设置了条件i<size

  • 如果count数组不为空,则应该至少为 1。(降序排序大小写)。空数组时,返回 0。

我只是做了一些修复,并重新编写了一点。(没有在 IDE 中编写,也没有经过测试)。只是显示一些想法。

public int longestSortedSequence() {
    if (size==0)return 0; //empty array
    int count = 1; //at least 1
    int max = 1;
    for (int i = 0; i < size-1; i++) {
        if (elementData[i] <= elementData[i + 1]) {
            count++;          
        } else {
            max=count>max?count:max;
            count = 1;
        }
    }
    return count>max? count: max;
}
于 2013-02-24T23:50:43.093 回答