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

自己建网站程序搜索引擎的网址有哪些

自己建网站程序,搜索引擎的网址有哪些,京东网上商城官网下载,有什么做论文的网站Every day a Leetcode 题目来源:130. 被围绕的区域 本题给定的矩阵中有三种元素: 字母 X;被字母 X 包围的字母 O;没有被字母 X 包围的字母 O。 本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 …

Every day a Leetcode

题目来源:130. 被围绕的区域

本题给定的矩阵中有三种元素:

  • 字母 X;
  • 被字母 X 包围的字母 O;
  • 没有被字母 X 包围的字母 O。

本题要求将所有被字母 X 包围的字母 O都变为字母 X ,但很难判断哪些 O 是被包围的,哪些 O 不是被包围的。

注意到题目解释中提到:任何边界上的 O 都不会被填充为 X。 我们可以想到,所有的不被包围的 O 都直接或间接与边界上的 O 相连。

我们可以利用这个性质判断 O 是否在边界上,具体地说:

对于每一个边界上的 O,我们以它为起点,标记所有与它直接或间接相连的字母 O;

最后我们遍历这个矩阵,对于每一个字母:

  • 如果该字母被标记过,则该字母为没有被字母 X 包围的字母 O,我们将其还原为字母 O;
  • 如果该字母没有被标记过,则该字母为被字母 X 包围的字母 O,我们将其修改为字母 X。

解法1:深度优先搜索

我们可以使用深度优先搜索实现标记操作。

在下面的代码中,我们把标记过的字母 O 修改为字母 A。

代码:

/** @lc app=leetcode.cn id=130 lang=cpp** [130] 被围绕的区域*/// @lc code=start
class Solution
{
public:// 主函数void solve(vector<vector<char>> &board){if (board.empty())return;int m = board.size(), n = m ? board[0].size() : 0;for (int i = 0; i < m; i++){dfs(board, i, 0);dfs(board, i, n - 1);}for (int j = 0; j < n; j++){dfs(board, 0, j);dfs(board, m - 1, j);}for (int i = 0; i < m; i++)for (int j = 0; j < n; j++){if (board[i][j] == 'A')board[i][j] = 'O';else if (board[i][j] == 'O')board[i][j] = 'X';}}// 辅函数void dfs(vector<vector<char>> &board, int x, int y){int m = board.size(), n = m ? board[0].size() : 0;if (x < 0 || x >= m || y < 0 || y >= n || board[x][y] != 'O')return;board[x][y] = 'A';dfs(board, x + 1, y);dfs(board, x - 1, y);dfs(board, x, y + 1);dfs(board, x, y - 1);}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n×m),其中 n 和 m 分别为矩阵的行数和列数。深度优先搜索过程中,每一个点至多只会被标记一次。

空间复杂度:O(n×m),其中 n 和 m 分别为矩阵的行数和列数。主要为深度优先搜索的栈的开销。

解法2:广度优先搜索

我们可以使用广度优先搜索实现标记操作。在下面的代码中,我们把标记过的字母 O 修改为字母 A。

代码:

/** @lc app=leetcode.cn id=130 lang=cpp** [130] 被围绕的区域*/// @lc code=start// DFS
//  class Solution
//  {
//  public:
//      // 主函数
//      void solve(vector<vector<char>> &board)
//      {
//          if (board.empty())
//              return;
//          int m = board.size(), n = m ? board[0].size() : 0;
//          for (int i = 0; i < m; i++)
//          {
//              dfs(board, i, 0);
//              dfs(board, i, n - 1);
//          }
//          for (int j = 0; j < n; j++)
//          {
//              dfs(board, 0, j);
//              dfs(board, m - 1, j);
//          }
//          for (int i = 0; i < m; i++)
//              for (int j = 0; j < n; j++)
//              {
//                  if (board[i][j] == 'A')
//                      board[i][j] = 'O';
//                  else if (board[i][j] == 'O')
//                      board[i][j] = 'X';
//              }
//      }
//      // 辅函数
//      void dfs(vector<vector<char>> &board, int x, int y)
//      {
//          int m = board.size(), n = m ? board[0].size() : 0;
//          if (x < 0 || x >= m || y < 0 || y >= n || board[x][y] != 'O')
//              return;
//          board[x][y] = 'A';
//          dfs(board, x + 1, y);
//          dfs(board, x - 1, y);
//          dfs(board, x, y + 1);
//          dfs(board, x, y - 1);
//      }
//  };// BFS
class Solution
{
private:vector<int> direction{-1, 0, 1, 0, -1};public:// 主函数void solve(vector<vector<char>> &board){if (board.empty())return;int m = board.size(), n = m ? board[0].size() : 0;queue<pair<int, int>> q;// 从最外围开始,初始化队列for (int i = 0; i < m; i++){if (board[i][0] == 'O'){q.push(pair<int, int>{i, 0});board[i][0] = 'A';}if (board[i][n - 1] == 'O'){q.push(pair<int, int>{i, n - 1});board[i][n - 1] = 'A';}}for (int j = 0; j < n; j++){if (board[0][j] == 'O'){q.push(pair<int, int>{0, j});board[0][j] = 'A';}if (board[m - 1][j] == 'O'){q.push(pair<int, int>{m - 1, j});board[m - 1][j] = 'A';}}// BFS遍历while (!q.empty()){auto [r, c] = q.front();q.pop();for (int k = 0; k < 4; k++){int x = r + direction[k], y = c + direction[k + 1];if (x < 0 || x >= m || y < 0 || y >= n || board[x][y] != 'O')continue;q.push(pair<int, int>{x, y});board[x][y] = 'A';}}// 最终修改for (int i = 0; i < m; i++)for (int j = 0; j < n; j++){if (board[i][j] == 'A')board[i][j] = 'O';else if (board[i][j] == 'O')board[i][j] = 'X';}}
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n×m),其中 n 和 m 分别为矩阵的行数和列数。广度优先搜索过程中,每一个点至多只会被标记一次。

空间复杂度:O(n×m),其中 n 和 m 分别为矩阵的行数和列数。主要为广度优先搜索的队列的开销。

http://www.yayakq.cn/news/866047/

相关文章:

  • 彭州建设网站什么叫软件外包公司
  • 做网站下面会有小广告html5video网站
  • 网站查询备案服务商医院网站建设 利法拉网络
  • 建设银行快审额度查询网站教育网站开发价钱
  • 网站建设的教程深圳全网推广平台
  • 庙行网站建设视觉设计专业
  • 网站建设需要哪些工作微信运营者和管理员的区别
  • 网站一个页面多少钱陕西网站建设设计公司
  • 网站开发vs2013怎么查看网站服务器位置
  • 郑州网站建设品牌好腾讯云wordpress 主机
  • 成都市住房与城乡建设厅网站怎样把域名和做的网站连接
  • 郑州网站优化多少钱知名网站制作公司
  • 行业网站建设的书做蛋白go分析网站
  • 网页制作与网站建设宝典pdf长春网站建设方案托管
  • 长春网站制作优势吉网传媒个人博客网站域名注册
  • 通用网站建设如何做网站淘宝客
  • 餐饮网站建设的毕设报告wordpress 游戏 模板下载
  • 饿了么网站做要多少钱php网站开发与维护职位要求
  • 宁夏网站设计在哪里天津建设招标网站首页
  • 百度网盘搜索引擎网站设计制作属于哪个行业
  • 怎么给网站做域名重定向无锡有没有做网站的公司
  • 用网站做数据库吗东莞网站推广裙
  • 金阊公司网站建设电话品牌公关策划案例
  • h5网站开发 源码城市建设和房屋管理部门网站
  • 怒江北京网站建设台州网站建设公司哪个好
  • 微信绑定网站建设网站能赚钱
  • 医院网站前置审批最快多久出来网站建设 石家庄
  • 建材网站的模板南宁百姓网官网
  • 做网站怎么引流网站栏目做树形结构图
  • 做淘客的网站关键词有哪些泉州市住房和城乡建设局官方网站