leetcode219存在重复元素C语言问题

代码如下:
bool containsNearbyDuplicate(int* nums, int numsSize, int k) {
int i,j;
for(i=0;i<numsSize;i++)
{
for(j=0;j<numsSize;j++)
{
if(nums[i]==nums[j]&&abs(j-i)<=k)
{return true;}

    }
}
return false;

}
为什么最后提交的时候不能通过[1,2,3,1,2,3] k=2的测试呢?输出为什么是true?c语言小白,求教各位大神!

2个回答

因为i可能和j相等,那么显然满足if(nums[i]==nums[j]&&abs(j-i)<=k)
你可以
if(nums[i]==nums[j]&&abs(j-i)<=k&&i!=j)

weixin_42737103
weixin_42737103 感谢!
接近 2 年之前 回复

i和j是会相等的,一定会满足if(nums[i]==nums[j]&&abs(j-i)<=k)
并且楼主的代码是可以优化的,要避免不必要的搜索。看楼主的代码目的应该是 判断在K范围内 是否有两个数字相等

#include
using namespace std;

bool containsNearbyDuplicate(int* nums, int numsSize, int k)
{
int i,j;
for(i=k;i<numsSize;i++)

{
for(j=i-k;j<i;j++)
if(nums[i]==nums[j])
return true;
}
return false;
}

int main()
{
int a[10]={1,2,3,1,2,3};
int b[11]={1,2,3,2,5,6};
cout<<containsNearbyDuplicate(a,6,3)<<endl;
//cout<<containsNearbyDuplicate(b,6,2)<<endl;

return 0;

}

weixin_42737103
weixin_42737103 我说怎么一直超时呢,谢谢大神!
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐