zoukankan      html  css  js  c++  java
  • 【LeetCode】974. 和可被 K 整除的子数组

    题目描述

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

    示例:

    输入:A = [4,5,0,-2,-3,1], K = 5
    输出:7
    解释:
    有 7 个子数组满足其元素之和可被 K = 5 整除:
    [4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]
    

    提示:

    1. 1 <= A.length <= 30000
    2. -10000 <= A[i] <= 10000
    3. 2 <= K <= 10000

    思路

    求组合数1+2+3+...+n=(1+n)*n/2

    代码

    class Solution {
        public int subarraysDivByK(int[] nums, int k) {
            int[] map = new int[k];
            map[0] = 1;
            int preSum = 0;
            int ans = 0;
            for (int num : nums) {
                preSum = (preSum + num) % k;
                if (preSum < 0) { preSum += k; }
                ans += map[preSum]++;
            }
            return ans;
        }
    }
    
    class Solution {
        public int subarraysDivByK(int[] A, int K) {
            int[] dp = new int[K];  // 要么除K = 0, 只有当两个都是在里面的时候才进行加入
            int count = 0;
            int t = 0;
            int ans = 0;
            int i;
            for (i = 0; i < A.length; i++)
            {
                count += A[i];
                if (count % K < 0)
                {
                    t = count % K + K;
                }
                else t = count % K;
                if (t == 0)
                {
                    dp[0] += 1;
                    ans += dp[0];
                }
                else if (t != 0 && dp[t] == 0)
                {
                    dp[t] = 1;
                } 
                else if (t != 0)
                {
                    ans += dp[t];
                    dp[t] += 1;
                }
            }
            return ans;
        }
    }
    

    提交


    题后

  • 相关阅读:
    [BZOJ4480] JSOI2013 快乐的jyy
    [BZOJ4755] JSOI2016 扭动的回文串
    [BZOJ4754] JSOI2016 独特的树叶
    [BZOJ5179] JSOI2011 任务调度
    [BZOJ4320] SHOI2006 Homework
    [AT2300] Snuke Line
    [洛谷P3974] TJOI2015 组合数学
    [CF331E] Biologist
    [洛谷P4249] WC2007 剪刀石头布
    【BZOJ4548】小奇的糖果
  • 原文地址:https://www.cnblogs.com/melodyjerry/p/12971568.html
Copyright © 2011-2022 走看看