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

leetcode面试题17.最大子矩阵

sooooooo long没刷题了,汗颜
题目链接:leetcode面试题17

1.题目

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

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

n,m<-200

2.分析

1)最初想到的版本:
首先f[i][j][0]表示第i行前j个格子的前缀和,f[i][j][1]表示第j列前i个格子的前缀和,那么以len1,len2,col1,col2为左上角和右下角的矩阵的子矩阵和为:f[len2][col2][2]-f[len2][col1-1][2]-f[len1-1][col2][2]+f[len1-1][col1-1][2];但这样我们就需要枚举len1,len2,col1,col2,复杂度为NNMM
2)在此基础上优化,我们可以发现,在确定了len1,len2,col1时,我们只需要使得f[len2][col2][2]-f[len1-1][col2][2]最大即可,那么我们把col1从n-1->0枚举的过程中可以逐步去比较当前最大的f[len2][col2][2]-f[len1-1][col2][2]和当col2=col1时的f[len2][col2][2]-f[len1-1][col2][2]谁更大,维护一下最大值即可,那么复杂度降低为M
M*N,可以AC

3.代码

class Solution {
public:int f[210][210][5];static bool mycmp(vector<int> x,vector<int> y){return x[0]>y[0];}int get_sum(int len1,int len2,int col1,int col2){return f[len2][col2][2]-f[len1-1][col2][2];}vector<int> getMaxMatrix(vector<vector<int>>& matrix) {memset(f,0,sizeof(f));int m=matrix.size(),n=matrix[0].size();for(int i=0;i<m;i++)for(int j=0;j<n;j++){int len=i+1,col=j+1,c=matrix[i][j];f[len][col][0]=f[len-1][col][0]+c;f[len][col][1]=f[len][col-1][1]+c;f[len][col][2]=f[len-1][col-1][2]+f[len][col-1][1]+f[len-1][col][0]+c;}int ans=matrix[0][0],r1=0,r2=0,c1=0,c2=0;for(int i=0;i<m;i++)for(int k=i;k<m;k++){int len1=i+1,len2=k+1,col2=n;int col_sum=f[len2][col2][2]-f[len1-1][col2][2];for(int j=n-1;j>=0;j--){int col1=j+1;if(get_sum(len1,len2,col1,j+1)>col_sum){col_sum=get_sum(len1,len2,col1,j+1);col2=j+1;}int ans_test=f[len2][col2][2]-f[len2][col1-1][2]-f[len1-1][col2][2]+f[len1-1][col1-1][2];if(ans_test>ans){ans=ans_test;r1=i,c1=j,r2=k,c2=col2-1;}}}vector<int> ans_vec;ans_vec.push_back(r1);ans_vec.push_back(c1);ans_vec.push_back(r2);ans_vec.push_back(c2);return ans_vec;}};
http://www.lryc.cn/news/407215.html

相关文章:

  • 计算机网络:构建联结的基础
  • node和npm安装;electron、 electron-builder安装
  • 操作系统概念(黑皮书)阅读笔记
  • matlab gui下的tcp client客户端编程框架
  • Matplotlib : Python 的绘图库
  • 数据编织 VS 数据仓库 VS 数据湖
  • CSS(十一)——CSS分组和嵌套,尺寸(Dimension)
  • 必备神器!三款优秀远程控制电脑软件推荐
  • 关于正运动学解机器人手臂算法
  • MySQL 约束 (constraint)
  • 用python程序发送文件(python实例二十六)
  • 最新源支付系统源码 V7版全开源 免授权 附搭建教程
  • HTML:lang属性作用
  • Android SurfaceFlinger——纹理的绘制流程(二十八)
  • 深入解析Memcached:C#中的应用与实战案例
  • keyring 库
  • [css3] 如何设置边框颜色渐变
  • Redux +Toolkit 工具包快速入门
  • 【Python数据增强】图像数据集扩充
  • 实时同步:使用 Canal 和 Kafka 解决 MySQL 与缓存的数据一致性问题
  • WINUI——Microsoft.UI.Xaml.Markup.XamlParseException:“无法找到与此错误代码关联的文本。
  • C语言 | Leetcode C语言题解之第283题移动零
  • WPF项目实战视频《二》(主要为prism框架)
  • 【微信小程序实战教程】之微信小程序 WXS 语法详解
  • Android中Service学习记录
  • Elasticsearch:Java ECS 日志记录 - log4j2
  • MongoDB自学笔记(四)
  • 时序分解 | Matlab基于CEEMDAN-CPO-VMD的CEEMDAN结合冠豪猪优化算法(CPO)优化VMD二次分解
  • 新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题
  • 汽车免拆诊断案例 | 2014 款上汽名爵 GT 车发动机无法起动