小编Pra*_*ale的帖子

连续子阵列和

我在 Leetcode 上遇到了这个问题我看到了解决方案,但我无法理解它为什么起作用。它适用于模量的什么性质?我们怎么能说我们找到了一个总和等于 k ​​的子数组,仅仅通过查看模结果的前一次出现?

题:

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

示例 1:输入:[23, 2, 4, 6, 7], k=6 输出:True 解释:因为 [2, 4] 是大小为 2 的连续子数组,总和为 6。

问题链接

解决方案:

public boolean checkSubarraySum(int[] nums, int k) {
    Map<Integer, Integer> map = new HashMap<Integer, Integer>(){{put(0,-1);}};;
    int runningSum = 0;
    for (int i=0;i<nums.length;i++) {
        runningSum += nums[i];
        if (k != 0) runningSum %= k; 
        Integer prev = map.get(runningSum);
        if (prev != null) {
        if (i - prev > 1) return true; …
Run Code Online (Sandbox Code Playgroud)

java modulus

3
推荐指数
1
解决办法
4691
查看次数

标签 统计

java ×1

modulus ×1