C语言编程:判断数组里有没有重复数字,有true,无false

bool containsDuplicate(int* nums, int numsSize) {
int j=0;
for(int i=0;i<numsSize;i++){
if(numsSize==1)
return 0;
else if(j!=i)
return containsDuplicate(nums[i],nums[j]);
j++;
}
}

想不出来哪里有问题,请大神指点,O(∩_∩)O谢谢!
bool containsDuplicate(int* nums, int numsSize)
{
int tmp=0;
if(numsSize<2) return 0;
for (int j = 0; j < numsSize - 1; j++)
{
for(int i=0;1<numsSize-1-j;i++)
{
if(nums[i]>nums[i+1])
{ tmp=nums[i];
nums[i]=nums[i+1];
nums[i+1]=tmp;
}
}
}
for(int a= 0;1<numsSize-1;a++)
{
if (nums[a]==nums[a+1]) return 1;
else return 0;
}

}
又写了一遍,换了思路:先排序,然后两两比较。。然而还是不对,求大神帮看问题

//接口中增加一个索引,目标元素索引,默认从头开始扫描 
bool containsDuplicate(int* nums, int numsSize,int index=0)  
{
  //不要使用==1来判断,如果数组长度为0呢?    
  //另外要在循环处理前先预判,不要在循环体内判断,否则浪费CPU时间
  if(numsSize<2)return false;
  //检查索引(目标元素)是否为最后一个元素,是则任务结束,返回false
  if(index==(numsSize-1))return false;
  //从目标元素下一个元素开始遍历 
  for(int i=index+1;i<numsSize;i++)
  {
     //判断目标元素是否与i索引所指的元素相等,相等则返回true
     if (nums[index]==nums[i])return true; 
  }
  //扫描完所有元素后进行递归,将index递增,切换目标元素进一步检查 
  return containsDuplicate(nums,numsSize,index+1);
}

好几处错误,我就不一一写了,基本就是思路混乱,判断一个数组中元素重复值的基本思路就是一个一个取出值,并与剩余元素比较,一旦想等就返回真,已经比较过的元素不需要重复比较,然后你看看我的代码体会下。

追问

要求是两个参数

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
感觉你写得好混乱

bool cd(int *a, int b)
{
int i=1;
if(b<2)
{
return false;
}
while(i<b)
{
if(*a==*(a+i++))
return true;
}
a++; b--;
return cd(a, b);
}本回答被网友采纳
第2个回答  2015-11-12

用递归做,两个参数是不够的:

bool containsDuplicate(int* nums, int index ,int numsSize) {
    if(index>=numSize-1) return 0;
    int flag=0;
    for(int i=index+1;i<numsSize;i++){
       if(nums[i]==nums[index]){
           flag=1;
           break;
       }
    }
    return flag||containsDuplicate(nums,index+1,numSize);
 }