以下方法应返回整数列表中最长排序序列的长度。例如,如果名为 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);
}
最佳答案
两条评论:
对于每个
i
,您正在测试元素i+1
是否继续当前的非递减序列。因此,在循环的第一次迭代之前,您应该已经将元素 0 计算为属于当前非递减序列;在第一次迭代中,您测试元素 1 是否继续该序列。这意味着count
应在开始时设置为 1。您的代码可能会在 for 循环的最后一次迭代中抛出 ArrayIndexOutOfBoundsException,因为
i+1
将等于大小,这不是数组的有效索引。
关于Java(数组列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057989/