Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在比较有限的数组中查找元素?_C++_Arrays_Algorithm - Fatal编程技术网

C++ 在比较有限的数组中查找元素?

C++ 在比较有限的数组中查找元素?,c++,arrays,algorithm,C++,Arrays,Algorithm,给定X,M,N,其中X=要在数组中搜索的元素,N=仅访问数组中的前N个元素,M=数组大小,我们如何在具有最大(N+1)比较的数组中查找元素 比如说,, A=[3,5,2,9,8,4,1,6,7]这里M=9 让我们让N=6和X=5=>在这种情况下,只访问数组的前6个元素,并尝试查找其中是否存在X?这里的答案将返回真。但对于X=6,答案将是错误的 这个问题与时间复杂性无关。这是关于你进行比较的次数。例如,蛮力方法如下所示 void search(vector<int> A){

给定X,M,N,其中X=要在数组中搜索的元素,N=仅访问数组中的前N个元素,M=数组大小,我们如何在具有最大(N+1)比较的数组中查找元素

比如说,, A=[3,5,2,9,8,4,1,6,7]这里M=9 让我们让N=6和X=5=>在这种情况下,只访问数组的前6个元素,并尝试查找其中是否存在X?这里的答案将返回真。但对于X=6,答案将是错误的

这个问题与时间复杂性无关。这是关于你进行比较的次数。例如,蛮力方法如下所示

    void search(vector<int> A){
               for(int i=0; i<N; i++){ // [i < N is also comparison which is N times]
                     if(A[i] != X) continue;              // [N comparisons ]
                     else return true;
               }
               return false;
     }
void搜索(向量A){
对于(inti=0;iIdea)
修改第N+1个元素,使其具有X值,并消除范围检查。然后,一旦找到具有X值的元素(如果M
分析
尽管该方法消除了重复比较,但仍然有一个“额外”比较:

bool search(int* a, int n, int x)
{
  a[n] = x;
  int idx = 0;
  while (a[idx] != x) // n + 1 comparisons in case if value hasn't been found
    ++idx;
  return idx < n; // (n + 2)-th comparison in case if value hasn't been found
}

这不是一个练习问题。这是在面试中问到的。我不明白你想说什么。你能再详细解释一下吗?如果可能的话,举个例子::-)并且M总是大于N。(M>N)你知道,实际上我错了:)提供的解决方案将有N+2比较,而不是N+1。请参阅更新的答案(不会花太长时间)是的。这是一个简单的方法。我在采访这个问题时真的没有想到。无论如何,谢谢你的解决方案。:)编译时知道
X
N
M
吗?
bool search(int* a, int n, int x)
{
  a[n] = x;
  int idx = 0;
  while (a[idx] != x) // n + 1 comparisons in case if value hasn't been found
    ++idx;
  return idx - n; // returns 0 only when idx == n, which means that value is not found
}