芝士算法(前缀和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;
    }
相关推荐
caishenzhibiao1 小时前
降雨带波段点差 同花顺期货通指标
java·c语言·c#
皓月斯语1 小时前
B3867 [GESP202309 三级] 小杨的储蓄 题解
c++·算法·题解
rosmis2 小时前
agent各指标定义
android·java·开发语言
mifengxing2 小时前
Java 集合进阶(一)
java·开发语言·数据结构·复习笔记
半夢半醒12 小时前
[原创]《C#高级GDI+实战:从零开发一个流程图》第章:增加菱形、平行四边形、圆角矩形,文本居中显示
算法·c#·流程图
Jerry2 小时前
LeetCode 90. 子集 II
算法
机器学习之心2 小时前
CCD实验设计+SVM代理建模+改进NSGA-II工艺参数多目标优化,MATLAB代码
算法·支持向量机·matlab·多目标优化
SOLECA_2 小时前
Ascend C 算子实战(二)|SigmoidCustom 逐元素激活算子完整开发指南
算法
令狐前生2 小时前
Intellij IDEA 2025 破解安装
java·ide·intellij-idea