给定一个包含 非负数 的数组和一个目标 整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,且总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数。
链接:https://leetcode-cn.com/problems/continuous-subarray-sum
class Solution {
private boolean isMatch(int x, int k) {
if(k==0) {
if(x==0) {
return true;
}
else
{
return false;
}
}
else
{
if((x%k)==0) {
return true;
}
else
{
return false;
}
}
}
public boolean checkSubarraySum(int[] nums, int k) {
int[] preSum = new int[nums.length];
preSum[0] = nums[0];
for(int i=1; i<nums.length; i++) {
preSum[i] = preSum[i-1]+nums[i];
}
Map<Integer, Integer> mp = new HashMap<>();
for(int i=0; i<preSum.length; i++) {
if((i>=1)&&isMatch(preSum[i], k)) {
return true;
}
if(k!=0) {
if(mp.containsKey(preSum[i]%k)) {
if((i-mp.get(preSum[i]%k))>1) {
return true;
}
}
else
{
mp.put(preSum[i]%k, i);
}
}
else
{
if(mp.containsKey(preSum[i])) {
if((i-mp.get(preSum[i]))>1) {
return true;
}
}
else
{
mp.put(preSum[i], i);
}
}
}
return false;
}
}
网友评论