Leetcode 523.连续的子数组和

连续的子数组和

给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数

示例 1:

输入: [23,2,4,6,7], k = 6

输出: True

解释: [2,4] 是一个大小为 2 的子数组,并且和为 6。

示例 2:

输入: [23,2,6,4,7], k = 6

输出: True

解释: [23,2,6,4,7]是大小为 5 的子数组,并且和为 42。

说明:

  1. 数组的长度不会超过10,000。
  2. 你可以认为所有数字总和在 32 位有符号整数范围内。

 

同余的两段相减后的段和模k必为0

 

 1 import java.util.HashMap;
 2 
 3 public class Solution {
 4     public boolean checkSubarraySum(int[] nums, int k) {
 5         HashMap<Integer, Integer> map = new HashMap();
 6         map.put(0, -1);
 7         int sum = 0;
 8         for (int i = 0; i < nums.length; i++) {
 9             sum += nums[i];
10             Integer prev = map.get(k == 0 ? sum : sum % k);
11             if (prev != null) {
12                 if (i - prev > 1) {
13                     return true;
14                 }
15             } else {
16                 map.put(k == 0 ? sum : sum % k, i);
17             }
18         }
19         return false;
20     }
21 }

 

posted on 2019-02-14 00:28  kexinxin  阅读(127)  评论(0编辑  收藏  举报

导航