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;
        }
  • 相关阅读:
    laravel blog 一
    dede:channelartlist currentstyle高亮显示
    dede调用导航/幻灯
    rmp 安装LNMP环境
    无极分类之子孙树、父辈树
    创始人 密码
    mysql报错显示法文解决办法
    渐变色背景
    laravel sendmail
    工作流系统webservice服务
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8491770.html
Copyright © 2011-2022 走看看