C语言编程:判断数组里有没有重复数字,有true,无false
boolcontainsDuplicate(int*nums,intnumsSize){intj=0;for(inti=0;i<numsSize;i++){if(nums...
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;
}
}
又写了一遍,换了思路:先排序,然后两两比较。。然而还是不对,求大神帮看问题 展开
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;
}
}
又写了一遍,换了思路:先排序,然后两两比较。。然而还是不对,求大神帮看问题 展开
3个回答
展开全部
//接口中增加一个索引,目标元素索引,默认从头开始扫描
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);
}
好几处错误,我就不一一写了,基本就是思路混乱,判断一个数组中元素重复值的基本思路就是一个一个取出值,并与剩余元素比较,一旦想等就返回真,已经比较过的元素不需要重复比较,然后你看看我的代码体会下。
追问
要求是两个参数
展开全部
感觉你写得好混乱
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);
}
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);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用递归做,两个参数是不够的:
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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询