服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - LeetCode 动态规划之矩阵区域和详情

LeetCode 动态规划之矩阵区域和详情

2022-11-20 14:20心城以北 Java教程

这篇文章主要介绍了LeetCode 动态规划之矩阵区域和详情,文章基于Java的相关资料展开对LeetCode 动态规划的详细介绍,需要的小伙伴可以参考一下

题目

矩阵区域和

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

i - k <= r <= i + k,
j - k <= c <= j + k 且
(r, c) 在矩阵内。  

示例 1:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1
输出:[[12,21,16],[27,45,33],[24,39,28]]
 

示例 2:

输入:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2
输出:[[45,45,45],[45,45,45],[45,45,45]]
 

提示:

?
1
2
3
4
m == mat.length
n == mat[i].length
1 <= m, n, k <= 100
1 <= mat[i][j] <= 100

题解

解题分析

解题思路:

  • 本题是以典型的动态规划问题;
  • 获取前缀矩阵dp[][]
?
1
dp[i+1][j+1] = dp[i][j+1]+dp[i+1][j]+arr[i][j]-dp[i][j];

根据前缀矩阵计算结果:

  • 核心问题转化为了:1).求这两个过程的转移方程;2). 边界处理.

解题代码如下所示:

复杂度

  • 时间复杂度: O(M * N)
  • 空间复杂度: O(M * N)

解题代码

题解代码如下(代码中有详细的注释说明):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution {
    public int[][] matrixBlockSum(int[][] mat, int k) {
        int m = mat.length,n = mat[0].length;
        int[][] dp = get_dp(mat,m,n);
        return get_res(dp,m,n,k);
    }
    //获取dp数组
    public int[][] get_dp(int[][] arr,int m,int n){
        int[][] dp = new int[m+1][n+1];
        for (int i = 0; i < m; i++)
            for (int j = 0; j < n; j++)
                dp[i+1][j+1] = dp[i][j+1]+dp[i+1][j]+arr[i][j]-dp[i][j];
        return dp;
    }
    //获取结果
    public int[][] get_res(int[][] dp,int m,int n,int k){
        int[][] res = new int[m][n];
        int x1,y1,x2,y2;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                x1 = Math.max(0,i-k);y1 = Math.max(0,j-k);
                x2 = Math.min(m,i+k+1);y2 = Math.min(n,j+k+1);
                res[i][j] = dp[x2][y2]-dp[x1][y2]-dp[x2][y1]+dp[x1][y1];
            }
        }
        return res;
    }
}

提交后反馈结果(由于该题目没有进行优化,性能一般):

LeetCode 动态规划之矩阵区域和详情

到此这篇关于LeetCode 动态规划之矩阵区域和详情的文章就介绍到这了,更多相关LeetCode 矩阵区域和内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7083104853047640094

延伸 · 阅读

精彩推荐
  • Java教程Jmeter结构体系及运行原理顺序解析

    Jmeter结构体系及运行原理顺序解析

    这篇文章主要介绍了Jmeter结构体系及运行原理顺序解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    多测师_郑sir4072020-09-09
  • Java教程Java之PreparedStatement的使用详解

    Java之PreparedStatement的使用详解

    这篇文章主要介绍了Java之PreparedStatement的使用详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    繁星*墨菲6462021-11-15
  • Java教程Java static关键字详细介绍与用法总结

    Java static关键字详细介绍与用法总结

    这篇文章主要介绍了Java中static关键字的作用和用法详细介绍,主要讲了静态方法、静态变量、静态类、static和final一块用等内容。需要的朋友可以参考下...

    ppdyhappy4542020-09-10
  • Java教程Java实现计算一个月有多少天和多少周

    Java实现计算一个月有多少天和多少周

    这篇文章主要介绍了Java实现计算一个月有多少天和多少周,本文直接给出实例代码,需要的朋友可以参考下 ...

    junjie4462019-12-24
  • Java教程Spring boot actuator端点启用和暴露操作

    Spring boot actuator端点启用和暴露操作

    这篇文章主要介绍了Spring boot actuator端点启用和暴露操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    言玉gz7042021-10-20
  • Java教程Java编写掷骰子游戏

    Java编写掷骰子游戏

    这篇文章主要介绍了Java编写掷骰子游戏,需要的朋友可以参考下 ...

    mrr4212020-03-04
  • Java教程spring-boot读取props和yml配置文件的方法

    spring-boot读取props和yml配置文件的方法

    本篇文章主要介绍了spring-boot读取props和yml配置文件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    千山独行11052021-03-04
  • Java教程java使用OGEngine开发2048

    java使用OGEngine开发2048

    众所周知OGEngine是国人对AndEngine改进后的国产Java编程的游戏引擎,除了支持3D游戏这个鸡肋功能之外AndEngine的功能OGEngine都有,而且AndEngine缺少的多点触摸功...

    hebedich3582019-12-14