连续的子数组和

给定一个包含 非负数 的数组和一个目标 整数 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;
    }
}

推荐阅读更多精彩内容

  • 题目: 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2...
    WAI_f阅读 27评论 0 0
  • 523. 连续的子数组和 问题 给定一个包含非负数的数组和一个目标整数 ,编写一个函数来判断该数组是否含有连续的子...
    王可尊阅读 693评论 0 0
  • 题目描述 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 ...
    算法码上来阅读 51评论 0 0
  • 题目链接难度:中等 类型: 数组、前缀和 给定一个包含非负数的数组和一个目标整数 k,编写一个函...
    wzNote阅读 514评论 0 6
  • 题目描述:给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。 示例:输入:nums...
    windUtterance阅读 224评论 0 0