我正在做痘痘测试,其中一个是(我的解决方案在这篇帖子的底部):
任务说明
一只小青蛙想要到达河的另一边。青蛙目前位于0号位置,想要到达位置X.树叶从树上掉落到河面上。
给出一个非空零索引数组A,由表示落叶的N个整数组成。 A [K]表示一片叶子在时间K下降的位置,以秒为单位测量。
目标是找到青蛙可以跳到河的另一边的最早时间。只有当叶子出现在从1到X的河对岸的每个位置时,青蛙才能穿过。你可以认为河流中的电流速度可以忽略不计,即一旦落入河中,叶子就不会改变它们的位置。
例如,给定整数X = 5和数组A,使得:
A [0] = 1 A [1] = 3 A [2] = 1 A [3] = 4 A [4] = 2 A [5] = 3 A [6] = 5 A [7] = 4
在第二个6中,叶子落入位置5.这是叶子出现在河对岸的每个位置的最早时间。
写一个函数:
int solution(int X, vector<int> &A);
给定一个由N个整数和整数X组成的非空零索引数组A,返回青蛙可以跳到河的另一边的最早时间。
如果青蛙永远不能跳到河的另一边,那么该函数应该返回-1。
例如,给定X = 5和数组A,使得:
A [0] = 1 A [1] = 3 A [2] = 1 A [3] = 4 A [4] = 2 A [5] = 3 A [6] = 5 A [7] = 4
该函数应返回6,如上所述。
假设:
N and X are integers within the range [1..100,000];
each element of array A is an integer within the range [1..X].
复杂度:
expected worst-case time complexity is O(N);
expected worst-case space complexity is O(X), beyond input storage (not counting the storage required for input arguments).
可以修改输入数组的元素。
**My solution:**
int solution(int X, vector<int> &A) {
// write your code in C++11
auto iter = find(A.cbegin(), A.cend(), X);
if (iter != A.cend())
{
return distance(A.cbegin(),iter);
}
else
{
return -1;
}
}
尽管如此,在将此解决方案提交给codility之后,我得到的答复是这是错误的解决方案并且它给出了错误的答案。有人可以告诉我哪里弄错了吗? 谢谢。
答案 0 :(得分:0)
这是我能提出的解决方案。 请注意,c ++不是我最喜欢的语言,而且代码是可笑的(并且很可能它不是最佳解决方案),但是,嘿,它的工作原理很简单。
using namespace std;
int solution(int X, vector<int> &a){
set<int> filled = set<int>();
int time_taken = -1;
for (int i = 0; i < a.size(); i++){
if(a[i] > 0 && a[i] <= X){
filled.insert(a[i]);
if(filled.size() == X) return i;
}
}
return -1;
}