【发布时间】:2020-02-01 06:39:49
【问题描述】:
我正在处理一个面试问题..并且想出了需要找到的逻辑:
为大于
a[i](与j < i)的元素a[j]查找索引j,使得(i-j)最大。我想为数组中的每个索引i找到这个j,在O(n)或O(n log n)时间与O(n)额外空间。`
到目前为止我做了什么:
1) O(n^2) 使用简单的for loops
2) 构建平衡的 B.S.T.当我们从左到右扫描元素时,对于i'th 元素,找到大于它的元素索引。但我意识到它可以很容易地是 O(n) 用于单个元素,因此 O(n^2) 用于整个数组。
我想知道是否可以在O(n) 或O(n log n) 中进行。如果是,请给出一些提示。
编辑:我想我无法解释我的问题。让我清楚地解释一下:
我想要arr[j] 在arr[i] 的左侧,这样(i-j) 是最大的可能,arr[j]>arr[i] 并为所有索引找到它,即for(i=0 to n-1).
编辑 2:示例 - {2,3,1,6,0}for 2 , ans=-1for 3 , ans=-1for 1 , ans=2 (i-j)==(2-0)for 6 , ans=-1
@987654348 @ (i-j)==(4-0)
【问题讨论】:
-
能举个输入输出数据的例子吗?
-
我不太明白这个问题,是否要为数组中的每个元素找到比当前元素大的最左边的元素?
-
我不确定我是否理解正确,但不是要在数组中找到
min和max然后进行比较吗?即:[1. Find min]; [2. Find max]; [3. For given i-th element compare which is farther - min or max].就是这样。根据线性顺序的定义,没有什么比这更远了。 -
arr[i]
-
@all
i-j should be maximumnot arr[i]-arr[j]