首页 > 编程语言 > 详细

Leetcode 523.连续的子数组和

时间:2019-02-14 01:06:33      阅读:261      评论:0      收藏:0      [点我收藏+]

连续的子数组和

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

 

Leetcode 523.连续的子数组和

原文:https://www.cnblogs.com/kexinxin/p/10372534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!