【发布时间】:2017-03-21 08:04:20
【问题描述】:
我有一个数组,例如{1,2,4,5,6}。我希望我的函数找到最大可能的数字 X 使得 1,2,...,X-1 中的所有数字都在数组中。在这种情况下,X=3。数组中的数字可以从 0 到无穷大。
我的尝试是:
int array(int* t, int r) {
int* a;
int m=0;
int i;
for(i=0;i<=r;i++){
a[i]=i;
if(a[i]==t[i])
m++;
}
return m;
}
我想创建一个从 1 到 r 的数组,这是一个数组的长度,充满自然数,即 {1,2,3...} 。然后我想将它与实际的数组 t 进行比较。如果有匹配的,请寻找另一个。
我不知道为什么它不起作用以及如何解决它?
无论如何代码都不起作用,我仍然不知道如何解决这个问题。
仍在寻找答案。
更新:我做了类似的事情:
int array(int* t, int r) {
for(int x=0;x<r;x++){
for(int y=0; y<r-1;y++){
if(t[y]>t[y+1]){
int temp=t[y+1];
t[y+1]=t[y];
t[y]=temp;
}
}
}
for (int i = 0; i != r; i++) {
if (t[i] != (i + 1)) {
return i + 1;
}
}
return r + 1;
}
但是,当在输入数组中我在某个地方为零时,例如{5,0,1,2} 函数总是返回 1,不管 0 放在哪里。这是为什么呢?
【问题讨论】:
-
数组索引从零开始。修改您的 for 循环,使其变为:for(i=0;i
stackoverflow.com/questions/4108313/… -
a未初始化(顺便说一句,不需要)。 -
还是不行。移动了“*”还是不行
-
您的算法完全错误。只有当这些数字占据数组中最左边的位置并且按排序顺序时,它才会起作用。您想要一个缓慢但简单的解决方案,还是一个快速但复杂的解决方案?
-
您是否在进行桶排序,使用大量内存来获得快速运行时间?您忘记初始化 a,因此您试图将数字存储在内存中未定义的随机位置。如果这是您的计划,那么您需要有两个循环,一个用于构建查找,另一个用于获取答案。
标签: c++ arrays algorithm loops