芝士算法(前缀和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;
    }
相关推荐
nm_zfyjt25 分钟前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
海的透彻43 分钟前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat1 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习2 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one2 小时前
算法--构造
java·数据结构·算法
SL_staff2 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
其实防守也摸鱼2 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php
SL_staff3 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko73 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端