原题题目
代码实现(首刷自解)
bool checkSubarraySum(int* nums, int numsSize, int k){
int dp[10001] = {0},i,j;
for(i=1;i<=numsSize;i++)
{
if(i == 1) dp[i] = nums[i-1];
else dp[i] = dp[i-1] + nums[i-1];
for(j=0;j<i-1;j++)
{
if(!k && !(dp[i] - dp[j])) return true;
else if(k && !((dp[i] - dp[j]) % k)) return true;
}
}
return false;
}
代码实现(二刷自解 DAY 261 C++ 哈希+前缀)
class Solution {
public:
bool checkSubarraySum(vector<int>& nums, int k) {
if(nums.size() <= 1) return false;
unordered_map<int,int> map;
int size = nums.size(),tmpsum = 0,presum = 0;
tmpsum = (nums[0]) % k;
for(int i = 1;i < size;++i)
{
++map[presum];
tmpsum += (nums[i]);
tmpsum %= k;
if(i && map[tmpsum]) return true;
presum += (nums[i-1] % k);
presum %= k;
}
return false;
}
};