C++ 查找具有特定值的向量的索引

C++ 查找具有特定值的向量的索引,c++,C++,我正在做可变性测试,其中一个是(我的解决方案在这篇文章的底部): 任务描述 一只小青蛙想去河的对岸。青蛙目前位于位置0,想要到达位置X。树叶从树上落在河的表面上 您将获得一个非空的零索引数组,该数组由表示落叶的N个整数组成。A[K]表示在时间K一片树叶落下的位置,以秒为单位 目标是找到青蛙能跳到河对岸的最早时间。青蛙只能在从1到X的每一个位置都出现树叶时才能穿过河流。你可以假设河流中的水流速度很小,可以忽略不计,也就是说,树叶落在河流中后不会改变它们的位置 例如,给定整数X=5和数组A,以便:

我正在做可变性测试,其中一个是(我的解决方案在这篇文章的底部):
任务描述

一只小青蛙想去河的对岸。青蛙目前位于位置0,想要到达位置X。树叶从树上落在河的表面上

您将获得一个非空的零索引数组,该数组由表示落叶的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);
复杂性:

    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;
    }
}
**我的解决方案:**
整数解(整数X,向量&A){
//用C++11编写代码
自动iter=find(A.cbegin(),A.cend(),X);
if(iter!=A.cend())
{
返回距离(A.cbegin(),iter);
}
其他的
{
返回-1;
}
}
尽管如此,在将此解决方案提交给Codibility之后,我得到的答复是,这是不正确的解决方案,并且给出了错误的答案。谁能告诉我哪里弄错了吗?

谢谢。

这是我能想出的解决办法。 注意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;

}
使用名称空间std;
整数解(整数X,向量&a){
set filled=set();
int time_take=-1;
对于(int i=0;i如果(a[i]>0&&a[i]我认为当你的问题的格式是这样时,没有人会仔细阅读。@Pizol很抱歉,我已经更正了格式。好吧,你的解决方案只会发现,当第一个叶子落在X的位置时,你的任务是找出问题“叶子什么时候会落在1..X之间的所有位置”的答案.我想你错过了在时间X之前的某个时间可能会有几片叶子落下。或者没有。而且当你休假时,你必须等待休假#2.谢谢,这比我的好得多;)我希望那些否决我的人能提供一个更好的解决方案,这样我也能学到一些东西……我不会指望这些。那些蠢货,他们不提供有效和建设性的意见/批评,只投反对票。忘掉那些滴答声。在我最后一句话的最后一句话中,把t改为D;)我已经实际上我想知道更好的解决方案,因为根据任务描述,问题是O(n),我的解决方案是O(n*log(n)),使用老式的循环,并使用额外的内存作为一个集合。我不会指责任何人是混蛋。
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;

}