当前位置: 首页 > news >正文

每日算法刷题Day45 7.11:leetcode前缀和3道题,用时1h40min

二维前缀和

1.套路

304. 二维区域和检索 - 矩阵不可变 - 力扣(LeetCode)
![[二维前缀和.png]]

class NumMatrix{vector<vector<int> sum;
public:NumMatrix(vector<vector<int>& matrix){int n=matric.size(),m=matirx[0].size();sum.resize(n+1,vector<int>(m+1,0));for(int i=0;i<n;++i){for(int j=0;j<m;++j){sum[i+1][j+1]=sum[i][j+1]+sum[i+1][j]-sum[i][j]+matrix[i][j];}}return sum;}// 返回左上角(r1,c1),右下角(r2,c2)的子矩阵元素和int sumRegion(int r1,int c1,int r2,int c2){return sum[r2+1][c2+1]-sum[r2+1][c1]-sum[r1][c2+1]+sum[r1][c1];}
}
2.题目描述

1.给定一个二维矩阵 matrix,以下类型的多个请求:

  • 计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。
    实现 NumMatrix 类:
  • NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
  • int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子矩阵的元素 总和(答案) 。
    2.给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer(答案) ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:
  • i - k <= r <= i + k,
  • j - k <= c <= j + k 且
  • (r, c) 在矩阵内。
    3(学习).给你一个下标从 0 开始的整数矩阵 grid 和一个整数 k
    返回包含 grid 左上角元素、元素和小于或等于 k 的 子矩阵的数目(答案)
3.学习经验
1. 304.二维区域和检索-矩阵不可变(中等)

304. 二维区域和检索 - 矩阵不可变 - 力扣(LeetCode)

思想

1.给定一个二维矩阵 matrix,以下类型的多个请求:

  • 计算其子矩形范围内元素的总和,该子矩阵的 左上角 为 (row1, col1) ,右下角 为 (row2, col2) 。
    实现 NumMatrix 类:
  • NumMatrix(int[][] matrix) 给定整数矩阵 matrix 进行初始化
  • int sumRegion(int row1, int col1, int row2, int col2) 返回 左上角 (row1, col1) 、右下角 (row2, col2) 所描述的子矩阵的元素 总和 。
    2.模版题
代码
class NumMatrix {vector<vector<int>> sum;public:NumMatrix(vector<vector<int>>& matrix) {int n = matrix.size(), m = matrix[0].size();sum.resize(n + 1, vector<int>(m + 1, 0));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {sum[i + 1][j + 1] =sum[i][j + 1] + sum[i + 1][j] - sum[i][j] + matrix[i][j];}}}int sumRegion(int row1, int col1, int row2, int col2) {return sum[row2 + 1][col2 + 1] - sum[row2 + 1][col1] -sum[row1][col2 + 1] + sum[row1][col1];}
};
2.1314.矩阵区域和(中等)

1314. 矩阵区域和 - 力扣(LeetCode)

思想

1.给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和:

  • i - k <= r <= i + k,
  • j - k <= c <= j + k 且
  • (r, c) 在矩阵内。
    2,求左上角为(max(0,i-k),max(0,j-k)),右下角为(min(n-1,i+k).min(m-1,j+k))的子矩阵的值
代码
class Solution {
public:typedef long long ll;vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int n = mat.size(), m = mat[0].size();vector<vector<ll>> s(n + 1, vector<ll>(m + 1, 0));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {s[i + 1][j + 1] =s[i + 1][j] + s[i][j + 1] - s[i][j] + mat[i][j];}}vector<vector<int>> res(n, vector<int>(m, 0));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {int r1 = max(0, i - k), r2 = min(n - 1, i + k),c1 = max(0, j - k), c2 = min(m - 1, j + k);res[i][j] = s[r2 + 1][c2 + 1] - s[r2 + 1][c1] - s[r1][c2 + 1] +s[r1][c1];}}return res;}
};
3. 3070.元素和小于等于k的子矩阵的数目(中等,学习,还是代码能力不行)

3070. 元素和小于等于 k 的子矩阵的数目 - 力扣(LeetCode)

思想

1.给你一个下标从 0 开始的整数矩阵 grid 和一个整数 k
返回包含 grid 左上角元素、元素和小于或等于 k 的 子矩阵的数目。
2.二维前缀和,用计数器更新
还可以只维护每列前缀和,正常遍历更新,但遍历每行要单独一个变量tmp来把当前列已经遍历过的行的和加上去

代码

二维前缀和

class Solution {
public:typedef long long ll;int countSubmatrices(vector<vector<int>>& grid, int k) {int n = grid.size(), m = grid[0].size();vector<vector<ll>> s(n + 1, vector<ll>(m + 1, 0));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {s[i + 1][j + 1] =s[i][j + 1] + s[i + 1][j] - s[i][j] + grid[i][j];}}int res = 0;for (int i = 0; i < n; ++i) {int j = 0;// 计数器遍历while (j + 1 < m + 1 && s[i + 1][j + 1] <= k)++j;res += j;}return res;}
};

遍历每行,每列前缀和

class Solution {
public:typedef long long ll;int countSubmatrices(vector<vector<int>>& grid, int k) {int n = grid.size(), m = grid[0].size();vector<ll> sCol(m, 0); // 每列前缀和int res = 0;for (int i = 0; i < n; ++i) {ll tmp = 0;for (int j = 0; j < m; ++j) {sCol[j] += grid[i][j]; // 正常更新tmp += sCol[j];        // 加入这一列中以及遍历过的行的所有和if (tmp > k)break;++res;}}return res;}
};
http://www.dtcms.com/a/274939.html

相关文章:

  • 机器学习之线性回归(七)
  • 安全领域的 AI 采用:主要用例和需避免的错误
  • 基于k8s环境下pulsar高可用测试和扩缩容(上)
  • 基于k8s环境下pulsar高可用测试和扩缩容(下)
  • 线程通信与进程通信的区别笔记
  • CMU15445-2024fall-project1踩坑经历
  • 小米汽车今年6月新车交付超2.5万辆
  • Marin说PCB之Allegro高亮BOM器件技巧详解
  • 格密码--数学基础--03格的基本域与行列式
  • 用AI做带货视频评论分析【Datawhale AI 夏令营】
  • 《P3976 [TJOI2015] 旅游》
  • Guava LoadingCache
  • Apipost 与 Apifox 的 API 调试功能:全面对比与深入分析
  • Vue + Element UI 实现选框联动进而动态控制选框必填
  • 牛客 —— JZ22 链表中倒数最后k个结点
  • 前端八股-promise
  • FreeRTOS踩坑小记——vTaskList函数的使用
  • Activiti:activiti-app.war持久化功能实现
  • AI优化器美国VPS集成:智能算力部署与性能调优指南
  • (补充)RS422
  • Mysql:分库分表
  • STM32F103之存储/启动流程
  • 【世纪龙科技】几何G6新能源汽车结构原理教学软件
  • Linux C 管道文件操作
  • [spring6: @EnableLoadTimeWeaving]-使用案例
  • SSH基础原理
  • 速盾:高防CDN和普通CDN的区别大吗?
  • 【unity编辑器开发与拓展EditorGUILayoyt和GUILayoyt】
  • phpstudy搭建pikachu
  • Java 的集合都有哪些,都有什么特点?