给定未排序的数组,找到i,j使得i< j和A [i]<线性时间和常数空间中的[j]

时间:2012-10-29 06:01:31

标签: arrays algorithm data-structures

示例1:

输入:5 4 3 2 1

输出:nil

示例2:

输入:5 4 3 2 6 1

输出:0,4(索引)

请建议一种算法来找到这样的指数i,j,i< j和A [i]<线性时间和恒定额外空间的[j]。我已经使用2 for for循环在O(n^2)中解决了它。

1 个答案:

答案 0 :(得分:7)

嗯......我会立即假设如果存在ij,那么也必须存在ij这样{ {1}}和j == i + 1。如果是这样,算法将在数组上变成一个简单的单遍传递。

在您的第二个示例中,A[i] < A[j]i = 3

事实上,我们发现j = 4i jA[i] < A[j]。我们来看看i + 1 < j。如果A[i + 1]大于A[i + 1],那么只需设置A[i]即可。否则,如果j = i + 1小于或等于A[i + 1],则只需设置A[i]并重复。这将始终引导我们满足i = i + 1要求的j == i + 1对。

换句话说,只需查看您的数组,查找A[i] < A[j]情况。这就是它的全部内容。