芝士算法(前缀和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;
    }
相关推荐
就叫_这个吧4 小时前
Java递归方法实现面包屑导航
java·开发语言
小O的算法实验室4 小时前
IEEE TASE,基于MPC的多无人机协同搜索竞争群体优化方法
算法
fīɡЙtīиɡ ℡4 小时前
AI 应用系统设计
java·开发语言·人工智能
小飞学编程...4 小时前
【哈希表】
数据结构·哈希算法·散列表
城管不管4 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
码匠许师傅4 小时前
【C++ 面试真题】26. 聊聊 C++ 的智能指针
java·c++·面试
AI绘画哇哒哒4 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
比奇堡裤头村5 小时前
统计学习方法——提升方法
学习方法
Tbisnic5 小时前
BGE-M3 算法详解:从模型架构到三种检索方式的数学原理
算法·自然语言处理·大模型·bert·transformer·注意力机制
最强小杰5 小时前
gpt-5.6-sol 频繁报 503 怎么办?区分容量熔断和限速 429 的排查方法 + 可复用 retry wrapper
java·人工智能·gpt·ai