C++ 在比较有限的数组中查找元素?
给定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,答案将是错误的 这个问题与时间复杂性无关。这是关于你进行比较的次数。例如,蛮力方法如下所示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){
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
}