连续的子数组和

给定一个包含 非负数 的数组和一个目标 整数 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 mp = new HashMap<>();
        for(int i=0; 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;
    }
}

你可能感兴趣的:(连续的子数组和)