芝士算法(前缀和2.0)

目录

和为K的子数组

和可被K整除的子数组

连续数组

矩阵区域和


和为K的子数组

和为K的子数组

java 复制代码
 public int subarraySum(int[] nums, int k) {
         Map<Integer , Integer> hash = new HashMap<Integer , Integer>();
         hash.put( 0 ,1);
         //
         int ret = 0 , sum = 0;
         for(int x : nums ){
             sum += x;
             ret += hash.getOrDefault(sum - k,0);
             hash.put(sum , hash.getOrDefault(sum , 0) + 1);
         }
        return ret;
    }

和可被K整除的子数组

和可被K整除的子数组

java 复制代码
public int subarraysDivByK(int[] nums, int k) {
        Map<Integer , Integer> hash = new HashMap<Integer , Integer>();
        hash.put(0 % k ,1); 

        int sum = 0,ret = 0;
        for(int x : nums){
            sum += x;
            int r = (sum % k+ k) % k;
            ret += hash.getOrDefault(r,0);
             hash.put(r , hash.getOrDefault(r ,0)+1);//对当前值再次重放
        }
        return ret;
    }

连续数组

连续数组

java 复制代码
 public int findMaxLength(int[] nums) {
       Map<Integer, Integer> hash = new HashMap<Integer,Integer>();
       hash.put(0,-1);
       int sum = 0,ret = 0;
       for(int i = 0; i<nums.length ; i++){
         sum+= (nums[i] == 0 ? -1 : 1);
         if(hash.containsKey(sum))
         ret = Math.max(ret , i - hash.get(sum));
         else
         hash.put(sum,i);
       }
       return ret;
    }

矩阵区域和

矩阵区域和

java 复制代码
public int[][] matrixBlockSum(int[][] mat, int k) {
        int m = mat.length, n = mat[0].length;
  
        int[][] dp = new int[m+1][n+1];
        for(int i = 1; i <=m ; i++){
            for(int j =1 ; j<= n ;j++){
                dp[i][j] = dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+mat[i - 1][j - 1];
            }
        }
        int [][] ret = new int[m][n];
        for(int i = 0 ; i<m ; i++){
             for(int j = 0 ; j<n ; j++){
             int x1 = Math.max(0,i - k) + 1,y1 = Math.max(0,j - k) + 1;
             int x2 = Math.min(m - 1,i + k) + 1, y2=Math.min(n - 1,j + k) + 1;
             ret[i][j] = dp[x2][y2] - dp[x1 - 1][y2] - dp[x2][y1 - 1] +dp[x1 - 1][y1 - 1];
            }
        }
        return ret;
    }
相关推荐
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
一隅论数智3 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
倒头就睡的小比特3 天前
算法竞赛C++常用的STL
c++·算法
俊昭喜喜里3 天前
java中的继承和多态的区别
java
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕3 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码3 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖3 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时3 天前
01-06-A-JVM排查实战详解
java·jvm
猎头南楼3 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习