查找具有特定值

时间:2015-08-15 13:10:28

标签: c++

我正在做痘痘测试,其中一个是(我的解决方案在这篇帖子的底部):
任务说明

一只小青蛙想要到达河的另一边。青蛙目前位于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之后,我得到的答复是这是错误的解决方案并且它给出了错误的答案。有人可以告诉我哪里弄错了吗? 谢谢。

1 个答案:

答案 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;

}