leetcode560。子数组总和等于K

时间:2019-11-30 16:49:19

标签: c

我在Leetcode 560上发现了一个奇怪的东西。子数组Sum等于K

这是我的代码,由gcc编译

#define HASH_LEN 10000

int hashTable[HASH_LEN][2] = {0};

inline int hash_push(int value)
{
    int hashIdx, tempHashIdx;

    tempHashIdx = hashIdx = (value > 0) ? (value%HASH_LEN) : ((-1*value)%HASH_LEN);
    while( hashTable[hashIdx][1] > 0 )
    {
        if( hashTable[hashIdx][0] == value ) 
        {
            hashTable[hashIdx][1]++;
            return 1;
        }

        hashIdx = (hashIdx+1)%HASH_LEN;
        if(tempHashIdx == hashIdx) return -1;
    }
    hashTable[hashIdx][0] = value;
    hashTable[hashIdx][1] = 1;

    return 0;
}

inline int hash_find(int value)
{
    int hashIdx, tempHashIdx;

    tempHashIdx = hashIdx = (value > 0) ? (value%HASH_LEN) : ((-1*value)%HASH_LEN);

    while( hashTable[hashIdx][1] > 0 )
    {
        if( hashTable[hashIdx][0] == value ) return hashTable[hashIdx][1];

        hashIdx = (hashIdx+1)%HASH_LEN;
        if(tempHashIdx == hashIdx) return 0;
    }

    return 0;
}

int subarraySum(int* nums, int numsSize, int k){

    int i, j,  ans = 0, sum = 0, hashIdx;


    hash_push(0);


    for(i = 0; i < numsSize ; i++)
    {
        sum += nums[i];
        ans += hash_find(sum-k);
        hash_push(sum);

    }

    return ans;
}

在测试案例中它将得到错误的答案: [1,2,3] 3

但是我使用“运行代码”功能执行相同的测试用例,却获得了“接受”。

有人可以解释吗?

非常感谢!

2 个答案:

答案 0 :(得分:-1)

leetcode编译器肯定存在问题。我在许多问题中都注意到了同样的事情和其他错误。

答案 1 :(得分:-1)

好的...我明白了。 每次函数开始时,我都应该重新初始化全局变量hashTable。