Java 计算数组中最长有序子序列的长度

Java 计算数组中最长有序子序列的长度,java,Java,我在看一些网站,比如,我遇到了这个问题: 给定长度N>0的无序整数数组,计算数组中最长有序(从左[下索引]到右[高索引]升序)子序列的长度 就我个人而言,我正在努力用Java寻找解决方案。有人能帮忙吗 编辑: 一些例子: 例1 输入:[1,4,1,4,2,1,3,5,6,2,3,7] 预期产出:4 例2 输入:[3,1,4,1,5,9,2,6,5,3,5] 预期产出:3 例3 输入:[2,7,1,8,2,8,1] 预期输出:2您要查找的术语是子数组,而不是子序列(根据您的示例)。您可以使用简单的

我在看一些网站,比如,我遇到了这个问题:

给定长度N>0的无序整数数组,计算数组中最长有序(从左[下索引]到右[高索引]升序)子序列的长度

就我个人而言,我正在努力用Java寻找解决方案。有人能帮忙吗

编辑:

一些例子:

例1

输入:[1,4,1,4,2,1,3,5,6,2,3,7] 预期产出:4

例2

输入:[3,1,4,1,5,9,2,6,5,3,5] 预期产出:3

例3

输入:[2,7,1,8,2,8,1]
预期输出:2

您要查找的术语是子数组,而不是子序列(根据您的示例)。您可以使用简单的循环在线性时间内求解它:

int res = 0;
int cur = 0;
for (int i = 0; i < a.length; i++) {
    if (i > 0 && a[i] <= a[i - 1])
        cur = 0;
    cur++;
    res = Math.max(res, cur);
}
int res=0;
int cur=0;
for(int i=0;i如果(i>0&&a[i],则不清楚是否认为相等的元素是有序的。如果没有足够的元素来创建更大的maxLength,您也可以
返回

public static int maxLength(int[] array) {
    if (array.length <= 1) return array.length; // check for null also
    int maxLength = 1;
    int curLength = 1;
    for (int i = 1; i < array.length; i++) {
        //extra check to finish earlier if possible (you may omit it)
        if ((array.length - i + curLength) <= maxLength)
            return maxLength;
        if (array[i] > array[i-1]) //use >= if equal elements count too
            curLength++;
        else {
            if (maxLength < curLength)
                maxLength = curLength;
            curLength = 1;
        }

    }
    //final check (in case the last element is included in maxLength)
    if (maxLength < curLength)
        return curLength;
    return maxLength;
}
公共静态int maxLength(int[]数组){
if(array.length=if相等的元素也计数
curLength++;
否则{
if(最大长度<卷曲长度)
最大长度=卷曲长度;
卷曲长度=1;
}
}
//最终检查(如果最后一个元素包含在maxLength中)
if(最大长度<卷曲长度)
返回长度;
返回最大长度;
}

关于预期输出,您确定您的示例是正确的吗?如果您正在寻找@ILoveCoding回答的最长递增子序列,示例1的预期输出应该是6,因为最大递增子序列是[1,2,3,5,6,7]。或者您是指递增连续子序列(数字在一行中?)因为这就是您的示例所显示的。当您提到排序时,如何处理相等的数字?例如,在数组[2,2,2,3,4,5]中,排序的子数组长度是6或4?您还可以在if块内设置
res
(在
cur=0
之前)为了避免每次迭代都调用方法
Math.max
。但是,是的,这是一个非常小的改进。我希望解决方案有一个扰流板块,因为这是一个学习网站。@controlnetictWerkGuruorc有一个
>!我是一个扰流板
(评论中没有,但你可以在问答中使用)@controlnetictwerkguroorc我想,因为上面的代码是缩进的(4个空格),你必须先删除它们。但是这会删除语法突出显示。你必须在每一行上写它。