最大子矩阵+01矩阵

最大子矩阵
题目

思路

确定一个矩阵中的子矩阵,只需要确定矩阵对角线上两点的坐标即可,

在确定了子矩阵之后,还需要计算子矩阵中各元素之和,如果按照常规的循环方法来解决,时间复杂度是O(N^6),对于本题200长度大小,会超时,所以应该再另寻方法,仔细思考一番发现,确定子矩阵的四层循环,似乎是在所难免的,那么接下来的重点就是处理子矩阵中各元素和上边了,可以采用如下方法:定义一个同原始矩阵大小一样的矩阵,定义dp[i][j]为以[0][0]和[i][j]顶点矩阵的各元素之和,如果提前计算好,即将dp[][]的初始化和填表完成在寻找子矩阵之前,那么时间复杂度就变成了O(N^4),当确定好dp[][]之后,当确定了子矩阵的对角线上两点的坐标后,例如(x1,y1)和(x2,y2),将采取如下方法进行计算

填写dp[][]表时,当填写红色位置的值时,只需将S(紫)+S(绿)-S(蓝)+红色位置在原始矩阵中对应的值即可,即dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+matrix[i-1][j-1].(假设dp表比原始矩阵多一行,多一列)。

那么接下来在完成dp表的填写后,确定子矩阵的元素之和大小可采用如下方法:

确定红色区域之和=整个区域-绿色区域-紫色区域+橙色区域

S(红)= dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1].

在完成以上点之后,接下来确定最大子矩阵的坐标就信手拈来了,定义一个变量记录之前的最大值,当遇到破纪录的值时,更新最大子矩阵的坐标。

代码
class Solution {
public:int dp[210][210];vector<int> getMaxMatrix(vector<vector<int>>& matrix) {vector<int> ans(4);int a,b,c,d;int m=matrix.size(),n=matrix[0].size();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]+matrix[i-1][j-1];int ma=INT_MIN;for(int x1=1;x1<=m;x1++)for(int y1=1;y1<=n;y1++)for(int x2=x1;x2<=m;x2++)for(int y2=y1;y2<=n;y2++){int ret=dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1];if(ret>ma){ma=ret;// ans[0]=x1-1,ans[1]=y1-1,ans[2]=x2-1,ans[3]=y2-1;a=x1-1,b=y1-1,c=x2-1,d=y2-1;}}ans[0]=a,ans[1]=b,ans[2]=c,ans[3]=d;return ans;}
};

经过试验发现,如果采用注释掉的方法进行更新,会超时,但是采用上边的方法,就可以通过了。

01矩阵
题目

思路

采用广度优先遍历来解决,创建一个同原始矩阵同样大小的矩阵dists,矩阵中各位置的值为该点距离0的最短距离,对于原始矩阵中值为0的点,在dists矩阵中对应的值为0,首先将原始矩阵中值为0的点放到队列中,然后不断地进行广度优先遍历,对于没遍历过的点,放入队列中,直到队列为空,更新结束。

代码
class Solution {
public:vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {int m=mat.size(),n=mat[0].size();vector<vector<int>> dists(m,vector<int>(n,INT_MAX));queue<pair<int,int>> q;for(int i=0;i<m;i++)for(int j=0;j<n;j++){if(mat[i][j]==0){q.push({i,j});dists[i][j]=0;}   }int dx[4]={0,0,1,-1};int dy[4]={-1,1,0,0};while(!q.empty()){int a=q.front().first;int b=q.front().second;int dist=dists[a][b];q.pop();for(int k=0;k<4;k++){int x=a+dx[k];int y=b+dy[k];if(x>=0 && x<m && y>=0 && y<n){if(dists[x][y]>dist+1){dists[x][y]=dist+1;q.push({x,y});}}}}return dists;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/15863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Cloud】在项目中使用OpenFeign

使用OpenFeign是为了简化HTTP客户端的调用&#xff0c;它提供了一种声明式的方式来调用HTTP接口。在Spring Cloud项目中&#xff0c;OpenFeign被广泛应用。下面是一个简单的示例&#xff0c;展示了如何在Spring Boot项目中使用OpenFeign。 步骤 1: 添加依赖 首先&#xff0c;…

大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛

1、功能简介 &#xff08;1&#xff09;用户注册与用户登录 &#xff08;2&#xff09;手机搜索、手机比拼、手机个性化推荐 &#xff08;3&#xff09;点击搜索的手机图片会就用户行为&#xff0c;轮播展示用户行为&#xff0c;推荐点击次数靠前的手机 &#xff08;4&#xf…

​Java基础复习笔记 第16章:网络编程

1. 网络编程概述 1. 要想实现网络通信&#xff0c;需要解决的三个问题&#xff1a; - 问题1&#xff1a;如何准确地定位网络上一台或多台主机 - 问题2&#xff1a;如何定位主机上的特定的应用 - 问题3&#xff1a;找到主机后&#xff0c;如何可靠、高效地进行数据传输2. 实现网…

【云原生】K8s 管理工具 kubectl 详解(三)

金丝雀发布/灰度发布&#xff08;Canary Release&#xff09; 一、金丝雀发布简介 Deployment控制器支持自定义控制更新过程中的滚动节奏&#xff0c;如“暂停&#xff08;pause&#xff09;”或“继续&#xff08;resume&#xff09;”更新操作。比如等待第一批新的Pod资源创…

c语言----函数

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要整理c语言中函数的相关知识点 适合有编程基础的人快速掌握。。。。 函数分类 系统函数: 系统内置的函数,include包含进入之后可以直接使用 用户函数: 用户自定义的函数&#xff0c;自己写。 用户函数…

软考高级之redis中使用zset实现延迟队列,你答对了么?

实现延迟队列的思路 zset的特性&#xff0c;带有分数的排序&#xff0c;以时间戳作为分数进行排序 添加任务 zdd取出任务 zrangbyscore执行任务 zrem 定时任务 public static void main(String[] args) {Jedis jedis new Jedis("ip", 6379);TimerTask task new …

Boost系列之asio库简易使用及遇到的问题(UDP)和思考

Boost系列之asio库简易使用及遇到的问题&#xff08;UDP&#xff09; 1、个人学习asio的一些步骤和看法 首先我都是直接文档怼上&#xff1a;Boost.Asio - 1.68.0 在看文档需要了解一下大概&#xff1b; Overview - 1.68.0 (boost.org)&#xff0c;Using Boost.Asio - 1.68…

localhost 和 127.0.0.1 有什么区别?

当前端开发人员在本地调试时&#xff0c;他们经常与 localhost 互动&#xff0c;只需运行npm run命令就可以在浏览器中打开他们的网页&#xff0c;地址栏显示类似于 http://localhost:xxx/index.html的内容。 许多人在使用它时可能没有思考两者之间的区别。 考虑到我过去与开发…

SDK之嵌入式C

简介 嵌入式系统是指内置于各种设备中的微型计算机系统,与外部环境紧密交互,能够完成特定功能的计算机系统。这类系统广泛应用于工业控制、消费电子、汽车电子、医疗设备等领域。 嵌入式系统与普通的桌面计算机系统有很大不同,它们通常具有以下特点: 资源受限 嵌入式系统的…

探秘NumPy的奥秘:元素级操作与广播机制

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、NumPy基础与元素级操作 元素级操作的引入 元素级操作详解 广播机制初探 二、NumPy矩…

Linux操作指令大全

目录 &#x1f349;引言 &#x1f349; 基础命令 &#x1f348;pwd &#x1f348;cd &#x1f348;ls &#x1f348;mkdir &#x1f348;rmdir &#x1f348;cp &#x1f348;mv &#x1f348;rm &#x1f349; 文件操作命令 &#x1f348;cat &#x1f348;tac …

C语言怎样利⽤好敏感的内存资源?

一、问题 内存是⼀个很敏感的资源&#xff0c;就像敏感肌肤⼀样&#xff0c;要百般呵护。同时&#xff0c;内存资源又很复杂&#xff0c;如何正确地使⽤内存资源不容易&#xff0c;能够正确并且合理地利⽤好内存资源就更不容易。 下⾯通过⼀个例⼦&#xff0c;来讲解怎样利⽤好…

深度神经网络——什么是混淆矩阵?

概述 混淆矩阵是一种在机器学习和数据科学中广泛使用的分析工具&#xff0c;用于评估分类模型的性能。它通过比较实际类别和模型预测的类别来提供模型性能的详细信息。以下是混淆矩阵的一些关键点&#xff1a; 结构&#xff1a;混淆矩阵是一个表格&#xff0c;通常有两行两列&…

QT全局气泡类型提示框【自动宽度、多屏自适应居中】

参考 qt 消息弹出框 &#xff0c;无框&#xff0c;缓慢自动消失_new messagetips格式-CSDN博客 进行改进。 直接上代码。 头文件&#xff1a; #pragma once#include <QObject> #include <QWidget>class MessageTips : public QWidget {Q_OBJECTpublic:MessageTi…

stm32-USART串口外设

配置流程 初始化配置 1.开启时钟&#xff08;打开USART和GPIO的时钟&#xff09; void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); void RCC_APB1Periph…

游戏子弹类python设计与实现详解

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、子弹类设计思路 1. 属性定义 2. 方法设计 三、子弹类实现详解 1. 定义子弹…

ubuntu openvoice部署过程记录,解决python3 -m unidic download 时 unidic无法下载的问题

github给的安装顺序&#xff1a; conda create -n openvoice python3.9 conda activate openvoice git clone gitgithub.com:myshell-ai/OpenVoice.git cd OpenVoice pip install -e .安装MeloTTS: pip install githttps://github.com/myshell-ai/MeloTTS.git python -m unid…

tailwindcss 使用

tailwindcss 使用 1、tailwind.config.js 配置参考2、tailwind.css 配置3、动态生成css类名4、配置了qiankun后&#xff0c;layer不解析了 1、tailwind.config.js 配置参考 module.exports {mode: "jit", // 3.0以上可不用配置&#xff0c;默认该模式&#xff0c;无…

新能源汽车的电驱热管理

前言 新能源汽车的电驱热管理是指维持电动汽车电池、电机和电控系统在适宜的工作温度范围内&#xff0c;保障车辆高效、安全、稳定运行的技术方案。随着新能源汽车的快速发展和普及&#xff0c;电驱热管理技术也日益成为关注焦点。本文将从电池、电机和电控系统三个方面介绍新…

cmake配置opencv与boost库

Cmake配置外部依赖库&#xff08;以Opencv和Boost为例&#xff09; Cmake对于外部依赖库&#xff0c;需要知道外部库的头文件路径&#xff0c;库文件路径以及库的名字。比如&#xff0c;对于要使用的Boost库&#xff0c;需要知道头文件的位置&#xff0c;库目录的位置以及库依…