一道算法题,求大侠解答...
大概是说: 给你一个无序的非空数组A, 其中每个数都不一样. 在A中挑出一些数,这些数的下标组成新的数组B, 这些数并不要求按在A中的相对顺序, 同时满足:
1. A[B[0]] > A[B[1]] > ... > A[B[K]]
2. 设B中任意两个相邻的数为B[i], B[i+1], 则在A中要满足A[m]<A[B[i+1]], 其中min(B[i], B[i+1]) + 1<m<max(B[i], B[i+1]) - 1. 就是说A中下标在B[i], B[i+1]之间的所有数都要小于A[B[i]]与A[B[i+1]].
求B数组的最长长度.
可能我说得不够清楚,大家可以看原题.如下:
A non-empty zero-indexed array A containing N different integers is given. We are looking for the longest possible sequence built from elements of A, A[B[0]], A[B[1]], ..., A[B[K]], satisfying the following conditions:
1.The sequence must be decreasing; that is, A[B[0]] > A[B[1]] > ... > A[B[K]].
2.For any two consecutive elements of the sequence, A[B[I]] and A[B[I+1]], all the elements of A between them must be smaller than them; that is, for any J = MIN(B[I], B[I+1]) + 1, ..., MAX(B[I], B[I+1]) - 1, we have A[J] < A[B[I+1]].
Write a function:
int sequence(int A[], int N);
that, given a zero-indexed array A containing N different integers, computes the maximum length of a sequence satisfying the above conditions.
For example, for the following array A:
A[0] = 9 A[1] = 10 A[2] = 2
A[3] = -1 A[4] = 3 A[5] = -5
A[6] = 0 A[7] = -3 A[8] = 1
A[9] = 12 A[10] = 5 A[11] = 8
A[12] = -2 A[13] = 6 A[14] = 4
the function should return 6.
A sequence of length 6 satisfying the given conditions can be as follows:
A[9] = 12 A[1] = 10 A[4] = 3
A[8] = 1 A[6] = 0 A[7] = -3
Assume that:
the elements of A are all distinct;
N is an integer within the range [1..100,000];
each element of array A is an integer within the range [-1,000,000,000..1,000,000,000].
Complexity:
expected worst-case time complexity is O(N);
expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
没思路,求解答....