这个算法对于找到增长最长的子序列是否正确?

时间:2015-03-15 22:55:03

标签: algorithm

我收到一个未排序的数组,我需要找到增长最长的子序列。根据{{​​3}},最有效的算法是O(nlogn),这是O(n)所以我肯定做了一些愚蠢的错误

public static int[] longestAscending(int[] arr) {
        // {x /* starting index */, y /* ending index */};
        int[] max = {0, 0};
        int[] current = {0,1};

        for (int i=1; i<arr.length; i++) {
            if (arr[i-1] < arr[i]) {
                current[1]++;
                if (current[1] - current[0] > max[1] - max[0]) {
                    max[0] = current[0];
                    max[1] = current[1];
                }
            } else {
                current[0] = i;
                current[1] = i + 1;
            }
        }

        return max;
    }

1 个答案:

答案 0 :(得分:1)

您的算法仅检测连续的子序列,而不检测具有间隙的子序列。例如:

1 9 2 3

这里增长最长的子序列是1 2 3,您的算法无法找到。