我试图解决以下问题。给定一个实数数组
例如,第一个元素(7)没有比它更大的元素,因此它为NaN。对于第二个元素(2),7是更大的元素。因此,最终答案如下:
我的另一种方法是维护先前元素的排序列表,然后选择第一个大于当前元素的元素。这对我来说听起来像是对数线性(我不确定)。有没有更好的方法来解决这个问题?
[7, 2, 4, 8, 1, 1, 6, 7, 4, 3, 1]
,对于每个元素,我需要在数组中找到最近的前一个大于它的元素。例如,第一个元素(7)没有比它更大的元素,因此它为NaN。对于第二个元素(2),7是更大的元素。因此,最终答案如下:
[NaN, 7, 7, NaN, 8, 8, 8, 8, 7, 4, 3, 1]
。当然,我可以检查每个元素的所有前面的元素,但这在数组元素数量方面是二次的。我的另一种方法是维护先前元素的排序列表,然后选择第一个大于当前元素的元素。这对我来说听起来像是对数线性(我不确定)。有没有更好的方法来解决这个问题?
O(nlogn)
而不是O(logn)
。我认为O(nlogn)
是最好的方法。 - levi