题目一:找出数组中重复的数字
书上的解法:
bool duplicate(int numbers[],int length,int* duplication)
{
if(numbers==nullptr || length<=0)
return false;
for(int i=0;i<length;++i)
{
if(numbers[i]<0 || numbers[i]>length-1)
return false;
}
for(int i=0;i<length;++i)
{
while(numbers[i]!=i)
{
if(numbers[i]==numbers[numbers[i]])
{
*duplication=numbers[i];
return true;
}
//swap numbers[i] and numbers[numbers[i]]
int temp=numbers[i];
numbers[i]=numbers[temp];
numbers[temp]=temp;
}
}
return false;
}
在上述代码中,找到的重复数字通过参数duplication 传给函数的调用者,而函数的返回值表示数组中是否有重复的数字。当输入的数组中存在重复的数字时,返回true;否则返回false。
测试用例:
a.长度为n 的数组里包含一个或多个重复的数字。
b.数组中不包含重复的数字。
c.无效输入测试用例(输入空指针:长度为n 的数组中包含0~n-1 之外的数字)