weixin_42737103
2018-07-20 02:33
采纳率: 80%
浏览 1.2k
已采纳

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条回答 默认 最新

  • threenewbee 2018-07-20 02:37
    已采纳

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

    已采纳该答案
    打赏 评论
  • 海棠花开555 2018-07-20 09:09

    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;
    

    }

    打赏 评论