示例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)
中解决了它。
答案 0 :(得分:7)
嗯......我会立即假设如果存在i
和j
,那么也必须存在i
和j
这样{ {1}}和j == i + 1
。如果是这样,算法将在数组上变成一个简单的单遍传递。
在您的第二个示例中,A[i] < A[j]
和i = 3
。
事实上,我们发现j = 4
和i
j
和A[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]
情况。这就是它的全部内容。