我在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
但是我使用“运行代码”功能执行相同的测试用例,却获得了“接受”。
有人可以解释吗?
非常感谢!
答案 0 :(得分:-1)
leetcode编译器肯定存在问题。我在许多问题中都注意到了同样的事情和其他错误。
答案 1 :(得分:-1)
好的...我明白了。 每次函数开始时,我都应该重新初始化全局变量hashTable。