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

学网站软件设计php本地建站工具

学网站软件设计,php本地建站工具,南京网站费用网站建设,外贸建站上海题目链接 Leetcode.1559 二维网格图中探测环 rating : 1838 题目描述 给你一个二维字符网格数组 g r i d grid grid ,大小为 m x n ,你需要检查 g r i d grid grid 中是否存在 相同值 形成的环。 一个环是一条开始和结束于同一个格子的长度 大于等于…

题目链接

Leetcode.1559 二维网格图中探测环 rating : 1838

题目描述

给你一个二维字符网格数组 g r i d grid grid ,大小为 m x n ,你需要检查 g r i d grid grid 中是否存在 相同值 形成的环。

一个环是一条开始和结束于同一个格子的长度 大于等于 4 4 4 的路径。对于一个给定的格子,你可以移动到它上、下、左、右四个方向相邻的格子之一,可以移动的前提是这两个格子有 相同的值

同时,你也不能回到上一次移动时所在的格子。比方说,环 ( 1 , 1 ) − > ( 1 , 2 ) − > ( 1 , 1 ) (1, 1) -> (1, 2) -> (1, 1) (1,1)>(1,2)>(1,1) 是不合法的,因为从 ( 1 , 2 ) (1, 2) (1,2) 移动到 ( 1 , 1 ) (1, 1) (1,1) 回到了上一次移动时的格子。

如果 g r i d grid grid 中有相同值形成的环,请你返回 true ,否则返回 false

示例 1:

在这里插入图片描述

输入:grid = [[“a”,“a”,“a”,“a”],[“a”,“b”,“b”,“a”],[“a”,“b”,“b”,“a”],[“a”,“a”,“a”,“a”]]
输出:true
解释:如下图所示,有 2 个用不同颜色标出来的环:
在这里插入图片描述

示例 2:

在这里插入图片描述

输入:grid = [[“c”,“c”,“c”,“a”],[“c”,“d”,“c”,“c”],[“c”,“c”,“e”,“c”],[“f”,“c”,“c”,“c”]]
输出:true
解释:如下图所示,只有高亮所示的一个合法环:
在这里插入图片描述

示例 3:

在这里插入图片描述

输入:grid = [[“a”,“b”,“b”],[“b”,“z”,“b”],[“b”,“b”,“a”]]
输出:false

提示:

  • m = g r i d . l e n g t h m = grid.length m=grid.length
  • n = g r i d [ i ] . l e n g t h n = grid[i].length n=grid[i].length
  • 1 ≤ m ≤ 500 1 \leq m \leq 500 1m500
  • 1 ≤ n ≤ 500 1 \leq n \leq 500 1n500
  • g r i d grid grid 只包含小写英文字母。

解法一:并查集

我们从左上角开始遍历,假设当前位置是 ( i , j ) (i,j) (i,j),我们只用判断它的右边 和 下面的位置即 ( i + 1 , j ) (i+1,j) (i+1,j) ( i , j + 1 ) (i,j + 1) (i,j+1)

如果 g r i d [ i ] [ j ] = g r i d [ i + 1 ] [ j ] grid[i][j] = grid[i + 1][j] grid[i][j]=grid[i+1][j]

  • g r i d [ i ] [ j ] grid[i][j] grid[i][j] g r i d [ i + 1 ] [ j ] grid[i+1][j] grid[i+1][j] 处于两个连通块,那么我就他们合并到一起;
  • 如果 g r i d [ i ] [ j ] grid[i][j] grid[i][j] g r i d [ i + 1 ] [ j ] grid[i+1][j] grid[i+1][j] 已经处于同一个连通块了,那么说明存在环,直接返回 true

如果 g r i d [ i ] [ j ] = g r i d [ i ] [ j + 1 ] grid[i][j] = grid[i ][j + 1] grid[i][j]=grid[i][j+1]

  • g r i d [ i ] [ j ] grid[i][j] grid[i][j] g r i d [ i ] [ j + 1 ] grid[i][j + 1] grid[i][j+1] 处于两个连通块,那么我就他们合并到一起;
  • 如果 g r i d [ i ] [ j ] grid[i][j] grid[i][j] g r i d [ i ] [ j + 1 ] grid[i][j+1] grid[i][j+1] 已经处于同一个连通块了,那么说明存在环,直接返回 true

时间复杂度: O ( m × n ) O(m \times n) O(m×n)

C++代码:

class Solution {
public:bool containsCycle(vector<vector<char>>& grid) {int m = grid.size() , n = grid[0].size() , len = m * n;vector<int> p(len);for(int i = 0;i < len;i++) p[i] = i;function<int(int)> find = [&](int x) -> int{if(x != p[x]){p[x] = find(p[x]);}return p[x];};auto is_connected = [&](int a,int b){int x = find(a) , y = find(b);if(x == y) return true;return false;};auto merge = [&](int a,int b){int x = find(a) , y = find(b);p[x] = y;};for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){int x = i * n + j , y;if(j + 1 < n && grid[i][j] == grid[i][j + 1]){y = i * n + j + 1;if(is_connected(x,y)) return true;merge(x,y);}if(i + 1 < m && grid[i][j] == grid[i + 1][j]){y = (i + 1) * n + j;if(is_connected(x,y)) return true;merge(x,y);}}}return false;}
};

解法二:dfs

我们每次从没有访问过的位置出发开始超 上下左右 四个方向开始访问。

访问的时候注意,不能沿着来的方向再反方向回去。

在 dfs 的过程中,如果我们访问到了跟当前位置值相同,并且之前访问过的点,就说明存在环,直接返回 true

否则说明不存在环,最后返回 false

时间复杂度: O ( m × n ) O(m \times n) O(m×n)

C++代码:

//(-1,0) (0,-1) (0,1) (1,0) 分别为 上左右下
//这样对于 k 那么它的反方向就是 3 - kconst int dx[4] = {-1,0,0,1};
const int dy[4] = {0,-1,1,0};
class Solution {
public:bool containsCycle(vector<vector<char>>& grid) {int m = grid.size() , n = grid[0].size();bool vis[m][n];memset(vis,false,sizeof vis);function<bool(int,int,int)> dfs = [&](int x,int y,int dir) ->bool{for(int k = 0;k < 4;k++){int nx = x + dx[k] , ny = y + dy[k];//dir == k 说明现在的方向 跟 来的时候的方向 相反//我们不能再沿着来的路回去,所以这里直接跳过if(dir == k || nx < 0 || nx >= m || ny < 0 || ny >= n || grid[x][y] != grid[nx][ny]) continue;//此时 (nx,ny) 这个点之前已经访问过了 说明存在环 直接返回trueif(vis[nx][ny]) return true;vis[nx][ny] = true;if(dfs(nx,ny,3 - k)) return true;}return false;};for(int i = 0;i < m;i++){for(int j = 0;j < n;j++){if(vis[i][j]) continue;vis[i][j] = true;if(dfs(i,j,-1)) return true;}}return false;}
};
http://www.yayakq.cn/news/408601/

相关文章:

  • 长业建设网站电子商务网站开发背景与原因
  • 备案没有商城可以做商城网站吗营销型网站建设项目需求表
  • 精湛的网站建设专用车网站建设哪家好
  • 做海淘的网站做海淘的网站有哪些公众号搭建
  • 襄阳网站建设公司招聘wordpress下载网站模板
  • 湖南网站建设制作网站宝二级域名怎么设置
  • 移动端网站欣赏淘宝店标在线制作免费
  • 网站建设 验证码认证网站所有权要添加代码
  • 做微网站要多少钱天津免费建设网站
  • 长沙微商城网站建设智能建站网站
  • 做像58同城样的网站南通做网站找谁
  • 深圳网站设计go保定网站优化招聘
  • icp网站备案密码找回百度收录网站收费吗
  • 网站的导入流量怎么做android开发工具手机版
  • 山东系统建站怎么用网站建设的作用和用途
  • 网站开发猪八戒什么是软文
  • 上海建站模板厂家做个网站大概多少钱
  • 网站建设税金会计分录极简网站设计
  • 做职业测评的网站化妆品公司网站模板
  • 减肥养生网站建设app开发公司名字
  • 商城网站模板 免费网站制作方案答案是螃蟹的迷语
  • 微网站开发哪家好电商公司官网
  • 菜篮网网站开发技术网页版梦幻西游探案任务攻略
  • ae模板素材网站中国建设机械网网址
  • 泉州握旗公司网站建设深圳品牌女装品牌大全
  • 高端网站开发设计简介做系统前的浏览网站能找回吗
  • 烟台电子商务产业园网站建设微信公众号 做不了微网站
  • 全国建筑人才求职招聘网站怎么制作微信小程序后台运行
  • 现在网站一般都是什么语言做的wordpress 分类排行榜
  • 静态网站html网站设计下载