此函数计算最大可能数x,使得所有数字1,... x-1都在一个数组中,例如{1,3,2,5} - > 4.函数不适用于零的数组,因为它总是返回1.为什么?
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;
}
答案 0 :(得分:2)
让我们分解您的代码
<facepalm>D'oh!</facepalm>
这是一种排序算法(冒泡排序,种类)。因此,在这些循环之后,我们可以假设您的数组已经排序。
现在,如果您查看下一个for循环,循环将检查每个i的第(i + 1)个数字的存在。这意味着,在第一次迭代(i = 0)中,它将在第0位置检查1(i + 1)。如果没有找到,则返回该值或继续搜索。如果一切顺利,它将返回r + 1(数组大小+ 1)。
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;
}
} }
现在,如果数组中有一个0(全部为正数),它将始终占据第一个位置(第0个索引)。因此它返回1,因为它在第0个索引中期望为1。
如果你理解这一点,我不会想到,你也很难适应0。
答案 1 :(得分:1)
检查已排序数字的序列时,检查t[i] == i+1
,如果i
元素位于i位置。这仅适用于序列以1开头的情况。相反,您应检查i+1
元素是i
元素+1,所以
if (t[i]+1 != t[i+1]) {
return t[i] + 1;
}