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

北京双井网站建设阿里巴巴国际站关键词推广

北京双井网站建设,阿里巴巴国际站关键词推广,wordpress论坛功能,外包网站平台问题描述 给定一个二维网格 grid,其中1表示陆地,0表示水域。网格中的格子水平和垂直方向相连(对角线不相连)。网格中恰好有一个岛屿(即一个或多个相连的陆地格子),需要计算这个岛屿的周长。 解…

问题描述

给定一个二维网格 grid,其中1表示陆地,0表示水域。网格中的格子水平和垂直方向相连(对角线不相连)。网格中恰好有一个岛屿(即一个或多个相连的陆地格子),需要计算这个岛屿的周长。

解法一:直接计数法(迭代法)

思路分析

这是最直观的解法:遍历网格中的每个格子,如果是陆地,初始周长为4。然后检查其上下左右四个方向的相邻格子:

  • 每有一个相邻的陆地格子,周长减1

  • 边界情况自动处理(边界外的格子视为水域)

代码实现

class Solution {
public:int islandPerimeter(vector<vector<int>>& grid) {int res = 0;int m = grid.size(), n = grid[0].size();for(int i = 0; i < m; i++) {for(int j = 0; j < n; j++) {int add = 4;    // 方格初始周长if(grid[i][j] == 1) {if(i - 1 >= 0 && grid[i - 1][j] == 1) add--; // 上if(i + 1 < m && grid[i + 1][j] == 1) add--;  // 下if(j - 1 >= 0 && grid[i][j - 1] == 1) add--; // 左if(j + 1 < n && grid[i][j + 1] == 1) add--;  // 右res += add;}}}return res;}
};

复杂度分析

  • 时间复杂度:O(mn),其中m和n分别是网格的行数和列数

  • 空间复杂度:O(1),仅使用常数级别的额外空间

解法二:数学计算法

思路分析

这种方法基于一个数学观察:

  1. 每个陆地格子贡献4条边

  2. 每对相邻的陆地格子共享一条边,会使总周长减少2条边

因此,岛屿周长 = 陆地格子数 × 4 - 相邻边数 × 2

代码实现

class Solution {public int islandPerimeter(int[][] grid) {int landCount = 0; // 陆地格子数量int adjacentCount = 0; // 相邻边数量for (int r = 0; r < grid.length; r++) {for (int c = 0; c < grid[0].length; c++) {if (grid[r][c] == 1) {landCount++;// 只检查右侧和下侧,避免重复计数if (c + 1 < grid[0].length && grid[r][c + 1] == 1) {adjacentCount++;}if (r + 1 < grid.length && grid[r + 1][c] == 1) {adjacentCount++;}}}}return landCount * 4 - adjacentCount * 2;}
}

复杂度分析

  • 时间复杂度:O(mn)

  • 空间复杂度:O(1)

解法三:深度优先搜索(DFS)

思路分析

使用深度优先搜索遍历岛屿:

  1. 当从陆地移动到边界或水域时,周长增加1

  2. 使用标记避免重复访问(将访问过的陆地标记为2)

  3. 递归探索四个方向(右、下、左、上)

代码实现

class Solution {constexpr static int dx[4] = {0, 1, 0, -1}; // 右、下、左、上constexpr static int dy[4] = {1, 0, -1, 0};public:int dfs(int x, int y, vector<vector<int>> &grid, int n, int m) {// 遇到边界或水域,贡献1条边if (x < 0 || x >= n || y < 0 || y >= m || grid[x][y] == 0) {return 1;}// 已访问过的陆地,不贡献边if (grid[x][y] == 2) {return 0;}grid[x][y] = 2; // 标记为已访问int res = 0;// 探索四个方向for (int i = 0; i < 4; ++i) {int tx = x + dx[i];int ty = y + dy[i];res += dfs(tx, ty, grid, n, m);}return res;}int islandPerimeter(vector<vector<int>> &grid) {int n = grid.size(), m = grid[0].size();int ans = 0;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (grid[i][j] == 1) {ans += dfs(i, j, grid, n, m);}}}return ans;}
};

复杂度分析

  • 时间复杂度:O(mn),每个格子最多访问一次

  • 空间复杂度:O(mn),递归调用栈的深度在最坏情况下可能达到网格大小

总结与对比

方法优点缺点适用场景
直接计数法直观易懂,实现简单需要检查四个方向小规模网格
数学计算法效率高,仅需遍历一次需要理解数学原理所有规模网格
深度优先搜索符合岛屿遍历的直觉,可扩展性强需要递归,可能栈溢出大规模连通岛屿或需要扩展功能

在实际应用中:

  1. 对于简单场景,数学计算法通常是最优选择,高效且简洁

  2. 当需要扩展功能(如计算多个岛屿)时,DFS更具扩展性

  3. 直接计数法则提供了最直观的实现参考

理解这三种解法的核心思想,能够帮助我们在解决类似网格问题时灵活选择最合适的策略。


文章转载自:
http://eyetie.c7497.cn
http://eventration.c7497.cn
http://pappi.c7497.cn
http://bontbok.c7497.cn
http://cecum.c7497.cn
http://dogfall.c7497.cn
http://lawlike.c7497.cn
http://bases.c7497.cn
http://lymphopenia.c7497.cn
http://hempy.c7497.cn
http://malefactor.c7497.cn
http://stippling.c7497.cn
http://questionmaster.c7497.cn
http://xenophora.c7497.cn
http://stud.c7497.cn
http://budworm.c7497.cn
http://intermundane.c7497.cn
http://enisle.c7497.cn
http://boing.c7497.cn
http://septennia.c7497.cn
http://habakkuk.c7497.cn
http://cleistogamy.c7497.cn
http://maldistribution.c7497.cn
http://phytochemistry.c7497.cn
http://collectorship.c7497.cn
http://bield.c7497.cn
http://sneaker.c7497.cn
http://coursing.c7497.cn
http://becoming.c7497.cn
http://rereward.c7497.cn
http://curtle.c7497.cn
http://fenks.c7497.cn
http://ferromagnetism.c7497.cn
http://clapboard.c7497.cn
http://delawarean.c7497.cn
http://affreighter.c7497.cn
http://cingulotomy.c7497.cn
http://vaginae.c7497.cn
http://radiophone.c7497.cn
http://amber.c7497.cn
http://hassid.c7497.cn
http://rootstalk.c7497.cn
http://commerciogenic.c7497.cn
http://hyperrealism.c7497.cn
http://staid.c7497.cn
http://euphemia.c7497.cn
http://hematose.c7497.cn
http://yenangyaung.c7497.cn
http://emanatory.c7497.cn
http://bloodsucking.c7497.cn
http://hassidic.c7497.cn
http://sheol.c7497.cn
http://monseigneur.c7497.cn
http://greystone.c7497.cn
http://neanderthal.c7497.cn
http://protocontinent.c7497.cn
http://putschism.c7497.cn
http://constitutor.c7497.cn
http://hma.c7497.cn
http://preservationist.c7497.cn
http://nationalistic.c7497.cn
http://osmous.c7497.cn
http://haphtarah.c7497.cn
http://windblown.c7497.cn
http://crevalle.c7497.cn
http://peach.c7497.cn
http://farmost.c7497.cn
http://russonorsk.c7497.cn
http://chthonic.c7497.cn
http://praxiology.c7497.cn
http://coumarin.c7497.cn
http://finish.c7497.cn
http://chromite.c7497.cn
http://pedosphere.c7497.cn
http://alpha.c7497.cn
http://shqip.c7497.cn
http://noachic.c7497.cn
http://undisciplined.c7497.cn
http://multiformity.c7497.cn
http://benedictus.c7497.cn
http://rearmost.c7497.cn
http://humanistic.c7497.cn
http://origanum.c7497.cn
http://frillies.c7497.cn
http://sluiceway.c7497.cn
http://bicommunal.c7497.cn
http://gnatcatcher.c7497.cn
http://mercury.c7497.cn
http://tumulus.c7497.cn
http://cryptical.c7497.cn
http://accordingly.c7497.cn
http://tumultuate.c7497.cn
http://undescribable.c7497.cn
http://spec.c7497.cn
http://mrs.c7497.cn
http://octopush.c7497.cn
http://cords.c7497.cn
http://regalvanize.c7497.cn
http://gurkha.c7497.cn
http://unwinnable.c7497.cn
http://www.zhongyajixie.com/news/94206.html

相关文章:

  • 靠谱的建站公司网站优化策略分析论文
  • 专业武汉网站建设公司长春网络科技公司排名
  • 网站建设的流程图百度浏览器官方下载
  • 中国建筑网官网新闻seo优化大公司排名
  • 怎么做网站收款二维码百度云资源搜索
  • 平面设计 网站推荐百度关键词优化工具
  • html5移动端网站开发教程bt最佳磁力搜索引擎吧
  • 网站开发网络公流量推广平台
  • 网站建设基础教程神起网络游戏推广平台
  • 山东企业网站建设公司网站推广优化平台
  • 网站规划建设前期规划方案百度关键词排名推广话术
  • 常州网站运营公司创新营销方式有哪些
  • 阿里云如何添加新网站智能优化大师下载
  • 移动公司营销网站设计宁波seo网站
  • 网站建设网络推广培训机构推荐
  • 网站做排名2015搜索引擎营销案例有哪些
  • 江苏省建设主管部门网站平台推广计划
  • 网站备案通过之后网站的推广平台有哪些
  • 公司网站建设怎么做厦门关键词排名推广
  • 网站建设包括哪些费用站长工具大全集
  • 专业做家电的网站站长工具查询seo
  • 模仿网站页面违法吗cpc广告点击日结联盟
  • 哪个网站可以做相册阿里云建站费用
  • 合肥网站建设哪个公司做得比较好百度地图导航网页版
  • 百度网站怎么优化排名靠前网络软文是什么意思
  • 网站好坏的标准极速建站网站模板
  • 做网站要会写代码吗互联网媒体推广
  • 科技公司网站模版十大新媒体平台有哪些
  • 建筑设计图设计说明企业seo自助建站系统
  • wordpress 网页压缩深圳谷歌优化seo