我收到一个未排序的数组,我需要找到增长最长的子序列。根据{{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;
}
答案 0 :(得分:1)
您的算法仅检测连续的子序列,而不检测具有间隙的子序列。例如:
1 9 2 3
这里增长最长的子序列是1 2 3
,您的算法无法找到。