码迷,mamicode.com
首页 > 编程语言 > 详细

连续子数组和 Continuous Subarray Sum

时间:2018-10-04 00:00:26      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:++   技术分享   表示   保存   lse   .com   注意   int   OLE   

2018-10-03 01:12:42

问题描述:

技术分享图片

问题求解:

本题本质上其实是一个preSum问题的变种,每次求preSum % k,并将之保存到map中,如果之后再次得到相同的余数,则表示这两者之间的和是k的整数倍。

需要注意的有两点:

1)map初始化的时候需要加入(0, -1)

2)如果k == 0,那么直接将sum加入到map中即可

    public boolean checkSubarraySum(int[] nums, int k) {
        if (nums.length == 0) return false;
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, -1);
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if (k != 0) sum %= k;
            Integer tmp = map.get(sum);
            if (tmp != null && i - tmp >= 2) return true;
            if (tmp == null) map.put(sum, i);
        }
        return false;
    }

 

连续子数组和 Continuous Subarray Sum

标签:++   技术分享   表示   保存   lse   .com   注意   int   OLE   

原文地址:https://www.cnblogs.com/TIMHY/p/9739014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!