LeetCode 542. 01 矩阵(BFS DP)

文章目录

    • 1. 题目
    • 2. 解题
      • 2.1 BFS
      • 2.2 DP动态规划

1. 题目

给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离。

两个相邻元素间的距离为 1 。

示例 1: 
输入:
0 0 0
0 1 0
0 0 0
输出:
0 0 0
0 1 0
0 0 0示例 2: 
输入:
0 0 0
0 1 0
1 1 1
输出:
0 0 0
0 1 0
1 2 1注意:
给定矩阵的元素个数不超过 10000。
给定矩阵中至少有一个元素是 0。
矩阵中的元素只在四个方向上相邻: 上、下、左、右。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/01-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 BFS

直白想法,每个点开启bfs找到0就停止搜索,返回距离,更新矩阵,但是超时

class Solution {int r,c;vector<vector<int>> dir = {{0,1},{0,-1},{1,0},{-1,0}};queue<pair<int,int>> q;
public:vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {int i, j, dis;r = matrix.size(), c = matrix[0].size();for(i = 0; i < r; ++i){for(j = 0; j < c; ++j){if(matrix[i][j] != 0){vector<vector<bool>> visited(r,vector<bool> (c,false));matrix[i][j] = bfs(i,j,matrix,visited);}}}return matrix;}int bfs(int i, int j, vector<vector<int>> &matrix, vector<vector<bool>> &visited){while(!q.empty())q.pop();visited[i][j] = true;q.push({i,j});int xf,yf,x,y,n,k,distance = 0;while(!q.empty()){n = q.size();while(n--){xf = q.front().first;yf = q.front().second;q.pop();for(k = 0; k < 4; ++k){x = xf+dir[k][0];y = yf+dir[k][1];if((x>=0 && x<r)&&(y>=0 && y<c) && !visited[x][y]){if(matrix[x][y] != 0){q.push({x,y});visited[x][y] = true;}elsereturn distance+1;}}}++distance;}return distance;}
};

换个思路:

  • 所有的为0的点先全部加入队列
  • 对队列中所有的0点开启BFS
  • 访问到了1,标记已访问,更新矩阵值为距离
class Solution {
public:vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {int i, j, dis = 0, r, c, n, xf, yf, x, y, k;r = matrix.size(), c = matrix[0].size();vector<vector<int>> dir = {{0,1},{0,-1},{1,0},{-1,0}};vector<vector<bool>> visited(r,vector<bool>(c,false));queue<pair<int,int>> q;for(i = 0; i < r; ++i){for(j = 0; j < c; ++j){if(matrix[i][j] == 0)q.push({i, j});}}while(!q.empty()){n = q.size();++dis;while(n--){xf = q.front().first;yf = q.front().second;q.pop();for(k = 0; k < 4; ++k){x = xf+dir[k][0];y = yf+dir[k][1];if(x>=0 && x<r && y>=0 && y<c && !visited[x][y] && matrix[x][y] != 0){q.push({x,y});visited[x][y] = true;matrix[x][y] = dis;}}}}return matrix;}
};

在这里插入图片描述

2.2 DP动态规划

dist[i][j]dist[i][j]dist[i][j]表示该位置到0的最短距离

  • 一个点1到0的最短距离可以从他的4个邻居中+1得到(取最小的)
  • 所有0点的最短距离distdistdist直接置为0

遍历2次

  • 先从左–》右,从上–》下
    dist[i][j]=min(dist[i][j],dist[i−1][j]+1)dist[i][j] = min(dist[i][j], dist[i-1][j]+1)dist[i][j]=min(dist[i][j],dist[i1][j]+1),上面的邻居+1
    dist[i][j]=min(dist[i][j],dist[i][j−1]+1)dist[i][j] = min(dist[i][j], dist[i][j-1]+1)dist[i][j]=min(dist[i][j],dist[i][j1]+1),左边的邻居+1
  • 再从从左《–右,从上《–下
    dist[i][j]=min(dist[i][j],dist[i+1][j]+1)dist[i][j] = min(dist[i][j], dist[i+1][j]+1)dist[i][j]=min(dist[i][j],dist[i+1][j]+1),下面的邻居+1
    dist[i][j]=min(dist[i][j],dist[i][j+1]+1)dist[i][j] = min(dist[i][j], dist[i][j+1]+1)dist[i][j]=min(dist[i][j],dist[i][j+1]+1),右边的邻居+1
class Solution {
public:vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {int r = matrix.size(), c = matrix[0].size(), i, j;if (r == 0)return matrix;vector<vector<int>> dist(r, vector<int>(c, INT_MAX-100000));//防止溢出//边界上的1元素距离外面无穷大//考虑左边和上边方向for (i = 0; i < r; i++) {for (j = 0; j < c; j++) {if (matrix[i][j] == 0)dist[i][j] = 0;else {if (i > 0)dist[i][j] = min(dist[i][j], dist[i-1][j]+1);if (j > 0)dist[i][j] = min(dist[i][j], dist[i][j-1]+1);}}}//考虑右边和下边方向for (i = r-1; i >= 0; i--) {for (j = c-1; j >= 0; j--) {if (i < r-1)dist[i][j] = min(dist[i][j], dist[i+1][j]+1);if (j < c-1)dist[i][j] = min(dist[i][j], dist[i][j+1]+1);}}return dist;}
};

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

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

相关文章

美团旅行销售绩效系统研发实践

背景 O2O是目前互联网竞争最激烈的领域之一&#xff0c;其重要的业务特征是有大规模的线下业务团队&#xff0c;他们分布在五湖四海&#xff0c;直接服务着数以百万的商家&#xff0c;责任很重&#xff0c;管理的难度巨大。能否通过技术手段&#xff0c;打造高效的线下团队&…

深入解析Node.js setTimeout方法的执行过程

深入了解setTimeout源码之前&#xff0c;本有两个选择。一是通过chromium源码分析&#xff0c;二是通过Node.js源码分析。后来发现第一种方案的源码获取成本太大&#xff0c;于是从Node官网获取了几十兆的代码用来了解。 当前的Node版本为&#xff1a;v10.16.0 setTimeout方法定…

别只关注GPT3!细如发丝的模型更具现实杀伤力!

这个世界上有两种极具难度的工程&#xff1a;第一种是把很平常的东西做到最大&#xff0c;例如把语言模型扩大成能够写诗写文写代码的GPT-3&#xff1b;而另一种恰恰相反&#xff0c;是把很平常的东西做到最小。 ----王苏语录GPT3自从诞生以来&#xff0c;便受到…

论文浅尝 - EMNLP2020 | 基于分组式对比学习的神经对话生成

论文笔记整理&#xff1a;叶宏彬&#xff0c;浙江大学计算机博士生。论文地址&#xff1a;https://arxiv.org/abs/2009.07543摘要&#xff1a;近年来&#xff0c;神经对话问答的产生已广受欢迎。现有对话模型学习中广泛采用了最大似然估计目标&#xff08;MLE&#xff09;。但是…

LeetCode 841. 钥匙和房间(DFS/BFS)

文章目录1. 题目2. 解题2.1 DFS2.2 BFS1. 题目 有 N 个房间&#xff0c;开始时你位于 0 号房间。每个房间有不同的号码&#xff1a;0&#xff0c;1&#xff0c;2&#xff0c;…&#xff0c;N-1&#xff0c;并且房间里可能有一些钥匙能使你进入下一个房间。 在形式上&#xff…

容器中用uwsgi协议部署注意的问题以及用flask部署

1 表示当前容器名 一般通过 docker exec -it 容器名 /bin/bash , 进入容器内部进行操作&#xff0c;比如安装环境&#xff0c;传输文件 2 4888 容器内部访问端口地址&#xff0c;如果对外开放api&#xff0c;需要对其进行映射&#xff0c;比如映射成11022,11022是对外访问的端…

美团点评金融平台Web前端技术体系

背景 随着美团点评金融业务的高速发展&#xff0c;前端研发数量从 2015 年的 1 个人&#xff0c;扩张到了现在横跨北上两地 8 个事业部的将近 150 人。业务新&#xff0c;团队新&#xff0c;前端领域框架技术又层出不穷&#xff0c;各个业务的研发团队在技术选择上没有明确的指…

参会邀请 - CCKS2020 | 2020全国知识图谱与语义计算大会(CCKS2020)明日开幕

本文转载自公众号&#xff1a; 中国中文信息学会。第十四届全国知识图谱与语义计算大会将于2020年11月12日-15日在南昌召开。会议由中国中文信息学会语言与知识计算专业委员会主办&#xff0c;由江西师范大学承办&#xff0c;智源社区提供社区支持。本次会议讲习班采用线上举行…

Linux 程 序 员 失 业 警 告

文 | 小戏有多少人期待过像贾维斯一样的强人工智能&#xff1f;尽管老实说看当下的技术离这一期待还很遥远&#xff0c;但用用类似 GPT-3 这样的技术去实现些朴素的愿望似乎并没有那么困难。就在昨天&#xff0c;来自 Facebook 的 Elvis 在推特上发布了一个借助 OpenAI 的 GPT-…

LeetCode 707. 设计链表(List)

文章目录1. 设计一个单链表2. 双向链表1. 设计一个单链表 在链表类中实现这些功能&#xff1a; get(index)&#xff1a;获取链表中第 index 个节点的值。如果索引无效&#xff0c;则返回-1。 addAtHead(val)&#xff1a;在链表的第一个元素之前添加一个值为 val 的节点。插入…

用Vue.js开发微信小程序:开源框架mpvue解析

前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架。使用此框架&#xff0c;开发者将得到完整的 Vue.js 开发体验&#xff0c;同时为 H5 和小程序提供了代码复用的能力。如果想将 H5 项目改造为小程序&#xff0c;或开发小程序后希望将其转换为 H5&#xff0c;mpvue 将是…

对比学习有多火?文本聚类都被刷爆了…

文 | 花小花Posy大家好&#xff0c;我是小花。对比学习的大火???? 越来越旺了&#xff0c;已然从CV蔓延到NLP了。今天给大家介绍的正是一篇将对比学习应用到文本聚类上的工作&#xff0c;NAACL21新鲜出炉的paper——《Supporting Clustering with Contrastive Learning》。…

论文浅尝 - WWW2020 | 生成多跳推理问题以改善机器阅读理解能力

论文笔记整理&#xff1a;谭亦鸣&#xff0c;东南大学博士生。来源&#xff1a;WWW 2020链接&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3366423.3380114概述这篇论文关注的任务是&#xff1a;基于给定文本的“多跳问题生成”&#xff08;多关系问题&#xff09;。作者提…

记一次Vue框架升级

框架升级背景 公司目前业务迭代很快&#xff0c;且大部分的流量都在公众号上。然而我们公众号所使用的框架却是3年前的Vue 1.0.16。面对Vue这3年来带来的无数新特性&#xff0c;我们只能望洋兴叹&#xff1a;看得见&#xff0c;摸不着&#xff0c;因为升级这事看起来太难了。 …

谈谈NLP下一个主战场:万亿参数的预训练模型!

自从BERT诞生以来&#xff0c;各大互联网巨头之间就展开了预训练语言模型军备竞赛&#xff0c;XLNet、ERNIE、RoBERTa、T5、GPT-3....但当事情进展到号称自己是zero-shot learner的GPT-3时&#xff0c;批判的声音变得明显多了。这么大&#xff0c;能用吗&#xff1f;真的能做到…

人物志 | 美团女技术总监任登君:不要给自己的人生设限

在我们美团技术团队超过6000名工程师中&#xff0c;有众多的女同学&#xff0c;她们是支撑中国领先的生活服务电子商务平台不可或缺的力量。3月8日女神节&#xff0c;我们专访了她们的代表——美团广告平台技术负责人任登君。登君也是我们团队里目前职位最高的女性技术Leader&a…

论文浅尝 - ISWC2020 | KnowlyBERT: 知识图谱结合语言模型补全图谱查询

论文笔记整理&#xff1a;胡楠&#xff0c;东南大学博士。来源&#xff1a;ISWC 2020动机像Wikidata这样的现代知识图已经捕获了数十亿个RDF三元组&#xff0c;但是它们仍然缺乏对大多数关系的良好覆盖。同时在NLP研究的最新进展表明&#xff0c;可以轻松地查询神经语言模型以获…

LeetCode 92. 反转链表 II(双指针)

1. 题目 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。 示例:输入: 1->2->3->4->5->NULL, m 2, n 4 输出: 1->4->3->2->5->NULL来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xf…

我对你的爱,是只为你而留的神经元

文 | 白鹡鸰有一个小轶专属神经元编 | 小轶有一个白鹡鸰专属神经元什么是苹果&#xff1f;红的&#xff1f;绿的&#xff1f;黄的&#xff1f;球状&#xff1f;斑点&#xff1f;香气&#xff1f;需要咬上一口才能确定&#xff1f;或者……其实我们在说某家技术公司&#xff1f;…

Android动态日志系统Holmes

背景 美团是全球领先的一站式生活服务平台&#xff0c;为6亿多消费者和超过450万优质商户提供连接线上线下的电子商务网络。美团的业务覆盖了超过200个丰富品类和2800个城区县网络&#xff0c;在餐饮、外卖、酒店旅游、丽人、家庭、休闲娱乐等领域具有领先的市场地位。平台大&a…