Codility から次の問題を解決しています。
小さなカエルが川の向こう側に行きたがっています。カエルは現在位置 0 にあり、位置 X に移動しようとしています。葉が木から川の水面に落ちます。落ち葉を表す N 個の整数で構成される空でないゼロ インデックスの配列 A が与えられます。A[K] は、時間 K で 1 枚の葉が落ちる位置を分単位で表します。目標は、カエルが川の反対側にジャンプできる最も早い時間を見つけることです。カエルが渡れるのは、川を渡る 1 から X までのすべての位置に葉が現れたときだけです。
次の解決策を使用しましたが、スコアは 81 しかありませんでした。
コードは C# です。
using System;
using System.Collections.Generic;
class Solution {
public int solution(int X, int[] A) {
bool[] tiles = new bool[X];
for (int i = 0; i < A.Length; i++)
{
tiles[A[i] - 1] = true;
bool complete = true;
for (int j = 0; j < tiles.Length; j++)
{
if (!tiles[j])
{
complete = false;
break;
}
}
if (complete)
return i;
}
return -1;
}
}
私のアルゴリズムは O(NX) で実行されます。O(N) のみを必要とするより良いアルゴリズムは何でしょうか?