这是我遇到的一个有趣的谜题,根据这个谜题,给定一个数组,我们需要在其中找到忍者索引。
Ninja 索引由以下规则定义:
一个索引 K,使得所有具有较小索引的元素的值都小于或等于 A[K],而所有具有较大索引的元素的值都大于或等于 A[K]。
例如,考虑:
A[0]=4, A[1]=2, A[2]=2, A[3]=3, A[4]=1, A[5]=4, A[6]=7, A[7]=8, A[8]=6, A[9]=9.
在这种情况下,5
是 ninja index ,因为 A[r]<=A[5] for r = [0,k] 和 A[5]<=A[r] r = [k,n]。
我们应该遵循什么算法在 O(n) 中找到它。我已经有一个蛮力 O(n^2) 解决方案。
编辑:可以有超过 1 个 ninja index ,但我们最好找到第一个。如果没有 NI ,那么我们将返回 -1。