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;
        }
  • 相关阅读:
    移动端 细节点
    基于新版 node 的 vue 脚手架搭建
    全屏展示
    Vue 小实例
    移动端 模拟键盘 盖住表单
    decodeURI decodeURIComponent
    简单时钟
    全选 反选 传统写法
    星级点评 面向过程的传统写法
    JQ字符串截取
  • 原文地址:https://www.cnblogs.com/stAr-1/p/8491770.html
Copyright © 2011-2022 走看看