これは私が見つけた興味深いパズルです。これによれば、配列が与えられた場合、その中の忍者インデックスを見つける必要があります。
Ninja インデックスは、次のルールによって定義されます。
より小さいインデックスを持つすべての要素が A[K] 以下の値を持ち、より大きいインデックスを持つすべての要素が A[K] 以上の値を持つようなインデックス 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
r = [0,k] および A[5]<=A[r] r = [k,n] に対して A[r]<=A[5] であるため、 は ninja index です。
O(n) でそれを見つけるために、どのアルゴリズムに従う必要がありますか。私はすでにブルートフォース O(n^2) ソリューションを持っています。
EDIT : 複数の ninja index が存在する可能性がありますが、できれば最初のものを見つける必要があります。NI がない場合は、-1 を返します。