我正在从 Codility 解决以下问题:
一只小青蛙想去河的另一边。青蛙当前位于位置 0,并想到达位置 X。树叶从树上掉到河面上。给定一个非空的零索引数组 A,由 N 个表示落叶的整数组成。A[K] 表示在时间 K 时一片叶子落下的位置,以分钟为单位。目标是找到青蛙可以跳到河对岸的最早时间。只有当树叶出现在从 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) 的更好算法?