給定一個包含 非負數(shù) 的數(shù)組和一個目標 整數(shù) k萍鲸,編寫一個函數(shù)來判斷該數(shù)組是否含有連續(xù)的子數(shù)組匠襟,其大小至少為 2,且總和為 k 的倍數(shù)疤坝,即總和為 n*k,其中 n 也是一個整數(shù)馆铁。
鏈接: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;
}
}