【发布时间】:2013-09-24 07:50:08
【问题描述】:
我正在通过 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)?
【问题讨论】: