其他分享
首页 > 其他分享> > 974. 和可被 K 整除的子数组

974. 和可被 K 整除的子数组

作者:互联网

给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续、非空)子数组的数目。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/subarray-sums-divisible-by-k
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

数组

class Solution {
    public int subarraysDivByK(int[] nums, int k) {
        int[] positive = new int[k + 1];
        int[] negative = new int[k + 1];
        positive[0] = negative[0] = 1;
        int sum = 0;
        int ans = 0;
        for (int num : nums) {
            sum = (sum + num) % k;
            if (sum >= 0) {
                ans += positive[sum]++ + negative[k - sum];
            } else {
                ans += negative[-sum]++ + positive[k + sum];
            }
        }
        return ans;
    }
}

哈希表

import java.util.HashMap;
import java.util.Map;

class Solution {
    public int subarraysDivByK(int[] nums, int k) {
        Map<Integer, Integer> dp = new HashMap<Integer, Integer>() {{
            put(0, 1);
        }};
        int sum = 0;
        int ans = 0;
        for (int num : nums) {
            sum = ((sum + num) % k + k) % k;
            int cnt = dp.getOrDefault(sum, 0);
            ans += cnt;
            dp.put(sum, cnt + 1);
        }
        return ans;
    }
}

标签:974,int,positive,sum,negative,num,数组,ans,整除
来源: https://www.cnblogs.com/tianyiya/p/15825286.html