【LeetCode: 面试题 17.24. 最大子矩阵 | 动态规划 】

最大子矩阵和问题归纳总结 一,最大子矩阵问题: 给定一个n*n(0< n <=100)的矩阵,请找到此矩阵的一个子矩阵,并且此子矩阵的各个元素的和最大,输出这个最大的值。 Example: 0 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 其中左上角的子矩阵: 9 2 -4 1 -1 8 此子矩阵的值为9+2+(-4)+1+(- 阅读详情

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,优快云-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

🚩 题目链接

⛲ 题目描述

给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。

返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。

注意:本题相对书上原题稍作改动

示例:

输入:
[
[-1,0],
[0,-1]
]
输出:[0,1,0,1]
解释:输入中标粗的元素即为输出所表示的矩阵

说明:

1 <= matrix.length, matrix[0].length <= 200

🌟 求解思路&实现代码&运行结果


⚡ 动态规划

🥦 求解思路
  1. 再学习这道题题目之前,大家可以先去看一下另一道最大子数组和的题解,再来学习这道题目就会非常容易。【LeetCode: 53. 最大子数组和 | 暴力递归=>记忆化搜索=>动态规划 | 分治法 】
  2. 我们先来简单理解一下这道题目的意思,这道题目区别于53.最大子数组和最大的不同在于,53题是一维的,但是这道题目是一个升级的版本,是二维的,但是核心的求解内思路是一样的。
  3. 既让说思路是一样的?那么我现在知道怎么求解一个一维数组的方法,但是并不知道二维数组怎么求解?这该怎么办呢?我们直接将二维数组转换为一维数组进性求解即可,怎么转换呢?就是挨个遍历从start开始,到end结束的行,按照列对其进行一个压缩即可。
  4. 然后我们找到最大子矩阵的和,如果当前的子矩阵的和是最大的,我们直接更新,并且抓取矩阵的坐标,最后直接返回即可。
  5. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {
    public int[] getMaxMatrix(int[][] matrix) {
        int m=matrix.length,n=matrix[0].length;
        int r1=0,c1=0,r2=0,c2=0;
        int max=Integer.MIN_VALUE,cur=0;
        for(int i=0;i<m;i++){
            int[] temp=new int[n];
            for(int j=i;j<m;j++){
                int start=0;
                cur=0;
                for(int k=0;k<n;k++){
                    temp[k]+=matrix[j][k];
                    cur+=temp[k];
                    if(cur>max){
                        max=cur;
                        r1=i;
                        c1=start;
                        r2=j;
                        c2=k;
                    }
                    if(cur<0){
                        cur=0;
                        start=k+1;
                    }
                }
            }
        }
        return new int[]{r1,c1,r2,c2};
    }
}
🥦 运行结果

时间复杂度:O(M*M*N)
在这里插入图片描述

空间复杂度:O(N)
在这里插入图片描述

💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

动态规划:最大子矩阵和问题 大家好,我是连人。本期我们讨论最大子段和的第一个推广问题:最大子矩阵和问题。 最大子段和问题: 首先先简单介绍一下最大子段和问题:在数组a中存放着n个整数,求i,j∈[0,n](i<j)使i和j区间内所有整数相加和最大。 如果a数组内全是负数,则最后结果记为0。 针对这个问题,我们设立一个变量b,b的规则是: 当b[j-1]>0时,b[j] = b[j-1] + a[j] 否则b[j]... 阅读详情

相关推荐

[python]:最大子矩阵

给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 注意:本题相对书上原题稍作改动 示例: 输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:输入中标粗的元素即为输出所表示的矩阵 说明: 1 <= matrix.leng

weixin_43587028的博客 3895

Codeforces Round #674 B. Symmetric Matrix(水题)

题目地址:传送门 题目贴上: 题意,给你n种 2x2的矩阵,并且每种矩阵可以无限次使用,问你是否能组成mxm的矩阵(新矩阵必须是严格按照主对角线对称矩阵) 思路:首先给你的2x2矩阵,很明显我们不能拼成奇数长宽的矩阵,所以如果m为奇数,直接输出no,最后考虑m为偶数的情况,很明显,如果给你n个2x2矩阵当中没有一个矩阵的主对角线对称矩阵,那肯定要无法组成更大的mxm型的对称矩阵 代码: #include<bits/stdc++.h> using namespace std; struct Po

YSJ367635984的博客 928

最大子矩阵和 (LeetCode面试题17.24)

题目描述: 给定一个正整数、负整数和 0 组成的 N × M矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:最大的和是0 答案可以是0 1 0 1或者1 0 1 0 说明:1 <= matrix.length, matr...

马小超 2538

最大的子矩阵问题

1、全为1的最大的子矩阵 在一个二维0 1矩阵中找到全为1的最大正方形,返回其边长。 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出:2 思路:动态规划,构造一个等大小的dp[n][m]矩阵,dp[i][j]表示以matrix[i][j]为右下角的全1正方形的边长。初始化dp[i][0]和dp[0][j]分别为matrix[i][0]和matrix[0][j],因为以边缘这一行一列中的点为右下角的全1正方形边长只有0和1两种情况,分别由他们本身是0还是1

much efforts, much luck 1315

Leetcode 面试题 17.24. 最大子矩阵 (最大子数组和的二维版本)

1. 暴力做法枚举r1,c1, r2, c2,求和,时间复杂度O(N^6)很爆炸。 2. 优化方法,二维前缀和优化,O(1)时间内求出给定r1,c1,r2,c2区域的和,时间复杂度为O(N^4) 3. 降维动态规划优化。 枚举起始行和结束行,对列求和,等效成一维最大子序列问题。由于所有起始行和结束行都枚举过,所以这个做法一定是对的。 这道题目还需要记录更新r1,c1,r2,c2比一般的题目要难。 class Solution { public: vector<int>..

wwxy1995的博客 1285

【强化学习】常用算法之一 “A3C”

A3C(Asynchronous Advantage Actor-Critic)算法是一种在强化学习领域中应用广泛的算法,它结合了策略梯度方法和价值函数的学习,用于近似解决马尔可夫决策过程(Markov Decision Process)问题。A3C算法在近年来备受关注,因为它在处理大规模连续动作空间和高维状态空间方面具有出色的性能。A3C算法是一种基于策略梯度的强化学习算法,通过多个并行的智能体异步地与环境交互,并利用Actor和Critic网络实现策略和价值的近似,从而实现快速而稳定的强化学习训练。

Code_and516的博客 6756

leetcode面试题 17.24. 最大子矩阵/动态规划

文章目录题目:面试题 17.24. 最大子矩阵基本思想:动态规划 题目:面试题 17.24. 最大子矩阵 给定一个正整数和负整数组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 注意:本题相对书上原题稍作改动 示例: 输入: [ [-1,0], [0,-1] ] 输出: [0,1,0,1] 解释:

yyf_blog 1092

关于华为高斯数据库出现Invalid or unsupported by client SCRAM mechanisms定位解决的过程

最近公司有个新项目使用的是高斯数据库,因为我们的项目是直接从别的项目组拿来的,配置都是已经配好的,但是在放到正式环境上之后出现报错。起初我们以为是测试和正式的版本不一致,但是结果是版本一致的。最后这个问题搞了我们几个小时,都没法解决。

Curtisjia的博客 3173

动态规划—最大子矩阵(leetcode 面试题17.24)

题目描述 给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 注意:本题相对书上原题稍作改动 示例: 输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:输入中标粗的元素即为输出所表示的矩阵 说明: 1 <= ...

guoxinian的专栏 442

Python爬虫实战:基于Scrapy与Playwright高效爬取人民网新闻数据

本文将详细介绍如何使用Python最新技术栈(Scrapy框架结合Playwright浏览器自动化工具)高效爬取人民网新闻数据。文章包含完整项目搭建、反反爬策略、数据解析存储以及性能优化等核心内容,提供可直接运行的代码示例,适合中高级Python开发者学习现代网络爬虫开发技术。python# 去除特殊空白字符。

2201_76125261的博客 1118

电路设计仿真软件:Mentor Graphics_(11).MentorGraphics软件操作与技巧

/ 定义自定义仿真命令// 加载设计文件// 运行仿真// 主函数return 1;return 0;// 自定义设计检查// 获取设计中的所有模块// 遍历所有模块// 检查模块名称是否符合规范if (!// 检查模块中的所有引脚if (!// 主函数main() {通过本节的学习,您应该已经掌握了如何在 Mentor Graphics 中进行二次开发,包括使用 Tcl、C++ 和 Python 进行基本和高级操作。

kkchenjj的博客 1636

每日一道Leetcode - 面试题 17.24. 最大子矩阵 【动态规划】

class Solution: def getMaxMatrix(self, matrix: List[List[int]]) -> List[int]: N = len(matrix) M = len(matrix[0]) # 初始化一维数组 b = [0] * M max_res = float("-inf") ans = [0]*4 for i in range(N): .

weixin_41041275的博客 224

Bert+CNN文本分类(含代码实现)

一、什么是CNN? CNN的特点: (1)特定特征位移不变性 (2)特征缩放不变性 2. CNN模型构造过程 2.1 Convolution(卷积) (1)获取关键特征(减少参数) (2)共享权重(再次减少参数) 2.2 Max Pooling(池化) 2.3 Flatten 向量转换为如图所示可以进入全连接层的向量模式 3. TextCNN 上图可理解为: 通过不同的size(如上图2、3、4等),上图红色代表 size=2,黄色...

Python,数据分析,机器学习,深度学习 1万+

每日一道Leetcode - 面试题 17.24. 最大子矩阵【动态规划】

class Solution: def getMaxMatrix(self, matrix: List[List[int]]) -> List[int]: ans = [0,0,0,0] N = len(matrix) M = len(matrix[0]) res = float('-inf') # 上边为i,下边为j,列使用k进行遍历 for i in range(0,N): .

weixin_41041275的博客 179

VSCode 配置 Claude Code 插件的 4 步安装法与 3 类常见报错解决方案

介绍 VSCode 中 Claude Code 插件的 4 步可靠安装流程与 3 类高频报错(上下文丢失、认证失败、加载卡死)的根因分析和精准修复方案,聚焦文件上下文捕获机制、请求头注入要求及缓存失效逻辑,提供可验证的命令行操作与日志定位方法。

weixin_28728443的博客 492

uniapp - [全端兼容] 高性能 tabbar 底部菜单凸起效果,原生系统自定义底部菜单不卡顿、切换页面不闪烁、自动缓存页面(底部菜单中间自定义一个图片并悬浮起来)

uniapp如何实现底部凸起按钮,uniapptabbar底部菜单怎么自定义,uniapp怎么让底部菜单中间突出来,uniapp自定义底部tabbar,uniapp高性能好用的底部菜单,uniapp自定义底部导航栏并解决闪烁问题,uniapp怎么设置凸起的底部tabbar,uniapp怎么用系统的底部菜单还想让中间的按钮凸起来,uniapp自定义tabbar性能不好怎么办,uni-app自定义导航栏实现中间凸起效果,uniapp底部导航栏中间圆形按钮凸起效果详细代码,uni-app自定义中间图标突起的

🏆 前端领域优质创作者 1万+

Leecode 面试题 17.24. 最大子矩阵 DP+前缀和

原题链接:Leecode 面试题 17.24. 最大子矩阵 代码一: class Solution { public: vector<int> getMaxMatrix(vector<vector<int>>& matrix) { int m=matrix.size(),n=matrix[0].size(); vector<vector<int>> sum(m+1,vector<int>

想买很多漂亮衣服但是买不起的博客 200

第3讲:单端传输线的时域TDR仿真(基于实战的第一次仿真视角切换)

本文为CST仿真系列教程的第3讲,主要介绍传输线阻抗(TDR)的两种仿真方法:基于S参数的频域计算和基于高斯脉冲的时域计算。文章详细演示了在CST PCB Studio中修改电容参数、设置TDR仿真参数(包括截止时间和采样点数)的操作步骤,并通过对比实验展示TVS寄生电容对阻抗曲线的影响。最后将两种TDR方法的结果进行对比,验证了两种方法的一致性。本教程适合硬件工程师通过时域波形直观分析传输线阻抗特性,是信号完整性分析的重要技能。

一只豌豆象的博客 225

Leetcode 面试题 17.24. 最大子矩阵(DAY 65) ---- 动态规划学习期(确实难顶:( 不看思路根本不会)

原题题目 代码实现(首刷看完思路自解) /** * Note: The returned array must be malloced, assume caller calls free(). */ int* getMaxMatrix(int** matrix, int matrixSize, int* matrixColSize, int* returnSize){ int* ret = (int*)malloc(sizeof(int) * 4); int i,j,k,max =

Love 6's Private Blog 246

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode面试题 17.24. 最大子矩阵

LeetCode面试题 17.24. 最大子矩阵 题目 给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:输入中标粗的元素即为输出所表示的矩阵 1 <= matrix.length, mat

viva_la__vida的博客 516

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

程序员面试金典 - 面试题 17.24. 最大子矩阵(转成一维最大子序和 DP)

文章目录1. 题目2. 解题2.1 前缀和(超时)2.2 动态规划 1. 题目 给定一个正整数和负整数组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。 若有多个满足条件的子矩阵,返回任意一个均可。 示例: 输入: [ [-1,0], ...

Michael是个半路程序员 1517

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

面试题 17.24. 最大子矩阵 (降维枚举 / 降维动态规划)

LeetCode: 面试题 17.24. 最大子矩阵 不理解 >> 待补 AC Code class Solution { public int[] getMaxMatrix(int[][] matrix) { int row = matrix.length, col = matrix[0].length; int[] ans = new int[4]; int res = Integer.MIN_VALUE;

lankerens 545

【LeetCode】连续子数组、子矩阵最大和问题

【LeetCode】连续子数组、子矩阵最大和问题 文章目录【LeetCode】连续子数组、子矩阵最大和问题连续子数组的最大和★最大子矩阵★★★最大黑方阵★★ 连续子数组的最大和★ 剑指 Offer 42. 连续子数组的最大和 【题目】输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 提示: 1 <= arr.length <= 10^5 -100 <= arr[i] <= 100 【示例】 输入: nums = [

像写诗一样优雅地写代码~ 1万+

【LeetCode】面试题 17.24. 最大子矩阵

题目:面试题 17.24. 最大子矩阵 面试题 17.24. 最大子矩阵 给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组[r1, c1, r2, c2],其中r1, c1分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 **注意:**本题相对书上原题稍作改动 示例: 输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:输入中标粗的元素即为输出所表示的矩

ZhShy 371

Leetcode 面试题 17.24. 最大子矩阵

本题链接 题目 给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。 注意:本题相对书上原题稍作改动 示例: 输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:输入中标粗的元素即为输出所表示的矩阵 说明: 1 <= matrix.len

Gorgeoustray 510

面试题 17.24. 最大子矩阵

给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。注意:本题相对书上原题稍作改动示例:输入: [ [-1,0], [0,-1] ] 输出:[0,1,0,1] 解释:输入中标粗的元素即为输出所表示的矩阵来源:力扣(LeetCode) 链接:https://leetcode.cn/pro

xiaolu567的博客 417
上一篇: 【LeetCode: 10. 正则表达式匹配 | 暴力递归=>记忆化搜索=>动态规划 】
下一篇: 【LeetCode: 410. 分割数组的最大值 | 暴力递归=>记忆化搜索=>动态规划 】
硕风和炜
硕风和炜 优质创作者: Java技术领域 优质创作者: Java技术领域
博客等级 码龄7年 2万+粉丝 1024原创
评论 19
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硕风和炜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值