zoukankan      html  css  js  c++  java
  • [leetcode]523. Continuous Subarray Sum

    从数组中找到子串的和是给定值得倍数

    哈希表法的精髓就是,到ab两个位置的和对target取余结果一样的话,ab之间的和肯定是target的整数倍

    public boolean checkSubarraySum(int[] nums, int k) {
            int l = nums.length;
            /*
            两种方法,动态规划和哈希表
            动态规划就是把长度为2-数组size的所有情况的所有组合遍历一遍
            dp[i]代表以i开头的组合,外层循环是len,dp[i]更新用上次的加上当前元素
            哈希表更快
            遍历整个数组,依次加当前数组元素并将相加和求余k,求余结果只有0~k-1这k中情况,
            将求余结果存入Hash Table中。
            如果遍历到当前位置求余结果已经在Hash Table中,
            表明从上一求余结果相同的位置到当前位置的子数组相加和是k的倍数,
            否则将求余结果存入Hash Table。
             */
            Map<Integer,Integer> map = new HashMap<>();
            //k=0的情况,假设-1位置有一个0
            map.put(0,-1);
            int sum = 0;
            for (int i = 0; i < l; i++) {
                sum+=nums[i];
                if (k!=0) sum%=k;
                if (map.containsKey(sum))
                {
                    if (i-map.get(sum)>1)
                        return true;
                }
                else {
                    map.put(sum,i);
                }
            }
            return false;
        }
  • 相关阅读:
    Django基础
    XSS BOT编写
    Weblogic ssrf+Redis Getshell学习
    CORS与JSONP配置不当所导致的信息泄露
    VulnHub FristLeaks 1.3
    攻防世界--REVERSE新手练习区writeup
    2019第三届强网杯线下3道RW
    SCTF2019--WEB 2题复现
    文件上传--利用.htaccess绕过黑名单
    CEF 与 QML 对比
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8491770.html
Copyright © 2011-2022 走看看