zoukankan      html  css  js  c++  java
  • 「Leetcode」974. Subarray Sums Divisible by K(Java)

    分析

    这题场上前缀和都想出来了,然后就没有然后了。。。哭惹.jpg
    前缀和相减能够得到任意一段连续区间的和,然后他们取余(K)看余数是否为0就能得到。这是朴素的遍历算法。那么反过来说,如果两个前缀和都对(K)(p),那么他们相减一定能够被K整除。
    我们就这么统计就可以了,然后一个简单的求和即可。想到不难,难的是想到。

    代码

    class Solution {
        public int subarraysDivByK(int[] A, int K) {
            int[] prefix = new int[A.length+1];
            for(int i=0; i<A.length; ++i)
            {
                prefix[i+1] = prefix[i] + A[i];
            }
            int[] cnt = new int[K];
            for(int p: prefix)
            {
                cnt[(p%K+K)%K]++;
            }
            int ans=0;
            for(int c: cnt)
            {
                ans += c*(c-1)/2;
            }
            return ans;
        }
    }
    
  • 相关阅读:
    C语言第四章
    C第三章,指代数据
    DES+MD5加密
    时间选择器
    百度地图定位
    Httputils请求网络数据
    xStream解析xml文件
    pulltorefresh
    slidingmenu的应用
    Duutils创建数据库
  • 原文地址:https://www.cnblogs.com/samhx/p/leetcode-0974.html
Copyright © 2011-2022 走看看