Java(数组列表)

标签 java

以下方法应返回整数列表中最长排序序列的长度。例如,如果名为 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);
}

最佳答案

两条评论:

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

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

关于Java(数组列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057989/

相关文章:

java - 获取实体的存储库

java - JSON异常 : A JSONObject text must begin with '{' at character

java - Java中的匿名子类方法

java - Spring Data 项目 - Couchbase 集成

java - 如何遍历一个json对象的所有子节点?

java - struts 2 : Action result. 如何在jsp上显示浏览器地址行链接?

java - 没有从 api 调用中获取可读数据

java - 如何将字符串发送到 GWT DataGrid?

java - 相同的条件逻辑为 Java 中的 AtomicBoolean 生成两个截然不同的字节码。为什么?

Java ProcessBuilder 和 Windows 系统变量