芝士算法(前缀和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;
    }
相关推荐
她说可以呀2 分钟前
Docker 镜像的两种创建方式
java·分布式·docker
有Li7 分钟前
EEG脑电图数据处理基础
人工智能·算法·机器学习·语言模型·医学生
霸道流氓气质11 分钟前
AgentFlow 入门与实战:Task-Based 并发、EWMA 动态调度与四道门禁的 Java 生产级编排
java·开发语言
XMXFS19 分钟前
小红书推荐算法底层逻辑解析:用数据思维做内容优化
python·算法·新媒体运营·推荐算法
愿得一猪蹄22 分钟前
# Java线程池实战,别再new Thread了
java
0+11125 分钟前
算法 --栈
算法·leetcode
鶴哥只手遮天28 分钟前
Gmsh 源码深度解析-第 2 章 几何内核
算法·开源
ee又momo31 分钟前
# 深入理解Java注解,从使用到自定义
java
鶴哥只手遮天34 分钟前
Gmsh 源码深度解析-第 9 章 后处理与插件体系
算法·开源
圣保罗的大教堂36 分钟前
leetcode 3723. 数位平方和的最大值 中等
leetcode