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

江苏网站建设要多少钱车身做网站宣传图

江苏网站建设要多少钱,车身做网站宣传图,08影院 wordpress,求生之路2怎么做非官方网站文章目录 一、200、岛屿数量1.1 深度优先搜索DFS1.2 广度优先搜索BFS 二、695、岛屿的最大面积2.1 深度优先搜索DFS2.2 广度优先搜索BFS 三、完整代码 所有的LeetCode题解索引#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、200、岛屿数量 1.1 深度优先搜… 文章目录 一、200、岛屿数量1.1 深度优先搜索DFS1.2 广度优先搜索BFS 二、695、岛屿的最大面积2.1 深度优先搜索DFS2.2 广度优先搜索BFS 三、完整代码 所有的LeetCode题解索引可以看这篇文章——【算法和数据结构】LeetCode题解。 一、200、岛屿数量 1.1 深度优先搜索DFS 思路分析本题当中1代表的是陆地0代表海洋我们需要计算连接在一起的陆地岛屿数量而上下左右这种才算连接在一起对角线和反对角线上的元素不算。例如下图算三个岛屿 基本思路是遇到一个没有遍历过的陆地计数器然后把该节点陆地连接的陆地全部标记上。遇到标记过的陆地节点和海洋节点全部跳过最终计数器就是岛屿的数量。因为要标价节点是否遍历过所以我们创建一个visited布尔数组false代表未遍历过true代表遍历过。遍历二维数组采用两个for循环。节点的连接节点遍历通过偏移量数组delta_x_y。终止条件和越界参数处理的if语句相同。 程序如下 // 200、岛屿数量-深度优先搜索 class Solution { private:int result 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void dfs(vectorvectorchar grid, vectorvectorbool visited, int x, int y) { // 1、递归输入参数// 3、单层递归逻辑for (int i 0; i 4; i) {int nextx x delta_x_y[i][0];int nexty y delta_x_y[i][1];if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 越界了直接跳过 2、终止条件if (!visited[nextx][nexty] grid[nextx][nexty] 1) { // 没有访问过的同时是陆地的visited[nextx][nexty] true;dfs(grid, visited, nextx, nexty);}} } public:int numIslands(vectorvectorchar grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {visited[i][j] true; // 遍历的陆地标记改为trueresult; // 遇到没访问过的陆地岛屿数量dfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上true}}}return result;} };复杂度分析 时间复杂度 O ( m × n ) O(m \times n) O(m×n)其中 m m m和 n n n分别是岛屿数组的行数和列数。空间复杂度 O ( m × n ) O(m \times n) O(m×n)主要是栈的调用最坏情况下网格全是陆地深度优先搜索的深度达到 m × n m \times n m×n。 1.2 广度优先搜索BFS 思路分析广度优先搜索是一圈一圈的搜索过程而模拟这样的搜索过程可以用队列来实现。每当我们将坐标加入队列时就代表该左边已经遍历过了将visited数组标记为true。   程序如下 // 200、岛屿数量-广度优先搜索 class Solution2 { private:int result 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void bfs(vectorvectorchar grid, vectorvectorbool visited, int x, int y) {queuepairint, int que; // 定义队列队列中的元素是对组 pairint, intque.push({ x, y }); // 起始节点加入队列visited[x][y] true; // 只要加入队列立刻标记为访问过的节点while (!que.empty()) { // 开始遍历队列里的元素pairint, int cur que.front(); que.pop(); // 从队列取元素int curx cur.first;int cury cur.second; // 当前节点坐标for (int i 0; i 4; i) { // 开始想当前节点的四个方向左右上下去遍历int nextx curx delta_x_y[i][0]; int nexty cury delta_x_y[i][1]; // 获取周边四个方向的坐标if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 坐标越界了直接跳过if (!visited[nextx][nexty] grid[nextx][nexty] 1) { // 如果节点没被访问过que.push({ nextx, nexty }); // 队列添加该节点为下一轮要遍历的节点visited[nextx][nexty] true; // 只要加入队列立刻标记避免重复访问}}}} public:int numIslands(vectorvectorchar grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {visited[i][j] true; // 遍历的陆地标记改为trueresult; // 遇到没访问过的陆地岛屿数量bfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上true}}}return result;} };复杂度分析 时间复杂度 O ( m × n ) O(m \times n) O(m×n)其中 m m m和 n n n分别是岛屿数组的行数和列数。空间复杂度 O ( m i n ( m , n ) ) O(min(m, n)) O(min(m,n))在最坏情况下整个网格均为陆地队列的大小可以达到 m i n ( m , n ) min(m, n) min(m,n)。 二、695、岛屿的最大面积 2.1 深度优先搜索DFS 思路分析在200题岛屿数量的基础之上题目要求我们求岛屿的最大面积单块陆地的面积为1。思路很简单每次遍历之后面积计数器然后在不同陆地的面积之中取最大值。   程序如下 // 695、岛屿的最大面积-深度优先搜索 class Solution3 { private:int maxArea 0;int Area 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void dfs(vectorvectorint grid, vectorvectorbool visited, int x, int y) { // 1、递归输入参数// 2、终止条件 访问过或者遇到海水if (visited[x][y] || grid[x][y] 0) return; visited[x][y] true;Area;// 3、单层递归逻辑for (int i 0; i 4; i) {int nextx x delta_x_y[i][0];int nexty y delta_x_y[i][1];if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 越界了直接跳过 dfs(grid, visited, nextx, nexty);}} public:int maxAreaOfIsland(vectorvectorint grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {Area 0;dfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上truemaxArea max(Area, maxArea); }}}return maxArea;} };时间复杂度 O ( m × n ) O(m \times n) O(m×n)其中 m m m和 n n n分别是岛屿数组的行数和列数。空间复杂度 O ( m × n ) O(m \times n) O(m×n)主要是栈的调用最坏情况下网格全是陆地深度优先搜索的深度达到 m × n m \times n m×n。 2.2 广度优先搜索BFS 思路分析思路和深度优先搜索一样。   程序如下 // 695、岛屿的最大面积-广度优先搜索 class Solution4 { private:int maxArea 0;int Area 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void bfs(vectorvectorint grid, vectorvectorbool visited, int x, int y) {queuepairint, int que; // 定义队列队列中的元素是对组 pairint, intque.push({ x, y }); // 起始节点加入队列visited[x][y] true; // 只要加入队列立刻标记为访问过的节点Area;while (!que.empty()) { // 开始遍历队列里的元素pairint, int cur que.front(); que.pop(); // 从队列取元素int curx cur.first;int cury cur.second; // 当前节点坐标for (int i 0; i 4; i) { // 开始想当前节点的四个方向左右上下去遍历int nextx curx delta_x_y[i][0];int nexty cury delta_x_y[i][1]; // 获取周边四个方向的坐标if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 坐标越界了直接跳过if (!visited[nextx][nexty] grid[nextx][nexty] 1) { // 如果节点没被访问过que.push({ nextx, nexty }); // 队列添加该节点为下一轮要遍历的节点visited[nextx][nexty] true; // 只要加入队列立刻标记避免重复访问Area;}}}} public:int maxAreaOfIsland(vectorvectorint grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {Area 0;bfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上truemaxArea max(Area, maxArea);}}}return maxArea;} };复杂度分析 时间复杂度 O ( m × n ) O(m \times n) O(m×n)其中 m m m和 n n n分别是岛屿数组的行数和列数。空间复杂度 O ( m i n ( m , n ) ) O(min(m, n)) O(min(m,n))在最坏情况下整个网格均为陆地队列的大小可以达到 m i n ( m , n ) min(m, n) min(m,n)。 三、完整代码 # include iostream # include vector # include queue using namespace std;// 200、岛屿数量-深度优先搜索 class Solution { private:int result 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void dfs(vectorvectorchar grid, vectorvectorbool visited, int x, int y) { // 1、递归输入参数// 3、单层递归逻辑for (int i 0; i 4; i) {int nextx x delta_x_y[i][0];int nexty y delta_x_y[i][1];if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 越界了直接跳过 2、终止条件if (!visited[nextx][nexty] grid[nextx][nexty] 1) { // 没有访问过的同时是陆地的visited[nextx][nexty] true;dfs(grid, visited, nextx, nexty);}} } public:int numIslands(vectorvectorchar grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {visited[i][j] true; // 遍历的陆地标记改为trueresult; // 遇到没访问过的陆地岛屿数量dfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上true}}}return result;} };// 200、岛屿数量-广度优先搜索 class Solution2 { private:int result 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void bfs(vectorvectorchar grid, vectorvectorbool visited, int x, int y) {queuepairint, int que; // 定义队列队列中的元素是对组 pairint, intque.push({ x, y }); // 起始节点加入队列visited[x][y] true; // 只要加入队列立刻标记为访问过的节点while (!que.empty()) { // 开始遍历队列里的元素pairint, int cur que.front(); que.pop(); // 从队列取元素int curx cur.first;int cury cur.second; // 当前节点坐标for (int i 0; i 4; i) { // 开始想当前节点的四个方向左右上下去遍历int nextx curx delta_x_y[i][0]; int nexty cury delta_x_y[i][1]; // 获取周边四个方向的坐标if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 坐标越界了直接跳过if (!visited[nextx][nexty] grid[nextx][nexty] 1) { // 如果节点没被访问过que.push({ nextx, nexty }); // 队列添加该节点为下一轮要遍历的节点visited[nextx][nexty] true; // 只要加入队列立刻标记避免重复访问}}}} public:int numIslands(vectorvectorchar grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {visited[i][j] true; // 遍历的陆地标记改为trueresult; // 遇到没访问过的陆地岛屿数量bfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上true}}}return result;} };// 695、岛屿的最大面积-深度优先搜索 class Solution3 { private:int maxArea 0;int Area 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void dfs(vectorvectorint grid, vectorvectorbool visited, int x, int y) { // 1、递归输入参数// 2、终止条件 访问过或者遇到海水if (visited[x][y] || grid[x][y] 0) return; visited[x][y] true;Area;// 3、单层递归逻辑for (int i 0; i 4; i) {int nextx x delta_x_y[i][0];int nexty y delta_x_y[i][1];if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 越界了直接跳过 dfs(grid, visited, nextx, nexty);}} public:int maxAreaOfIsland(vectorvectorint grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {Area 0;dfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上truemaxArea max(Area, maxArea); }}}return maxArea;} };// 695、岛屿的最大面积-广度优先搜索 class Solution4 { private:int maxArea 0;int Area 0;vectorvectorint delta_x_y { {0, -1}, {0, 1}, {-1, 0}, {1, 0} }; // 上下左右四个方向的偏移量void bfs(vectorvectorint grid, vectorvectorbool visited, int x, int y) {queuepairint, int que; // 定义队列队列中的元素是对组 pairint, intque.push({ x, y }); // 起始节点加入队列visited[x][y] true; // 只要加入队列立刻标记为访问过的节点Area;while (!que.empty()) { // 开始遍历队列里的元素pairint, int cur que.front(); que.pop(); // 从队列取元素int curx cur.first;int cury cur.second; // 当前节点坐标for (int i 0; i 4; i) { // 开始想当前节点的四个方向左右上下去遍历int nextx curx delta_x_y[i][0];int nexty cury delta_x_y[i][1]; // 获取周边四个方向的坐标if (nextx 0 || nextx grid.size() || nexty 0 || nexty grid[0].size()) continue; // 坐标越界了直接跳过if (!visited[nextx][nexty] grid[nextx][nexty] 1) { // 如果节点没被访问过que.push({ nextx, nexty }); // 队列添加该节点为下一轮要遍历的节点visited[nextx][nexty] true; // 只要加入队列立刻标记避免重复访问Area;}}}} public:int maxAreaOfIsland(vectorvectorint grid) {vectorvectorbool visited vectorvectorbool(grid.size(), vectorbool(grid[0].size(), false)); // 遍历过的坐标for (int i 0; i grid.size(); i) { // 遍历行for (int j 0; j grid[0].size(); j) { // 遍历列if (!visited[i][j] grid[i][j] 1) {Area 0;bfs(grid, visited, i, j); // 深度优先搜索将连接的陆地都标记上truemaxArea max(Area, maxArea);}}}return maxArea;} };int main() {// // 200、岛屿数量测试案例//vectorvectorchar grid { {1, 1, 1, 1, 0} ,{1, 1, 0, 1, 0}, {1, 1, 0, 0, 0}, {0, 0, 0, 0, 0} }; //Solution s1;//int result s1.numIslands(grid);// 695、岛屿的最大面积测试案例vectorvectorint grid { {0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, { 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0 }, { 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0 } };Solution4 s1;int result s1.maxAreaOfIsland(grid);cout result endl;system(pause);return 0; }end
http://www.hkea.cn/news/14558995/

相关文章:

  • 网站空间提供商wordpress添加文件夹
  • 网络推广软件费用情况佛山全网优化
  • 网站图片大小多少合适wordpress po翻译
  • 淄博网站制作公司推广自己可以制作微信小程序吗
  • 西安双语网站建设哈尔滨网络seo公司
  • 长沙中小企业网站制作做图片网站侵权吗
  • 网站建设的流程wordpress模版下载
  • 广告网站开发快速排名网站系统
  • 汝州市住房和城乡规划建设局网站免费下载网站模版
  • 宁波网站建设制作订做顺德 网站设计
  • 广州本地网站黑客软件
  • 深圳网站建设公司哪家最好wordpress+4.5
  • 网站php环境搭建免费个人简历电子版填写
  • 艺术风格网站网站后台的文章怎么做
  • 烟台网站优化网站制作要求
  • 郑州外语网站建站优化网站建设商务的术语
  • 一 建设茶叶网站前的市场分析政务版企业微信app下载安装
  • 网站技术说明书模板免费的网站怎么做
  • 店铺网站平台建设方案网站空间域名注册
  • 惠州顺德网站建设wordpress博客速度很慢
  • 郑州做网站公司 汉狮网络专业东莞网站建设制作厂
  • 网站开发人员配置做解析会员电影的网站
  • 产品展示栏目在网站中的作用新手建站教程视频
  • 青海住房和城乡建设厅网站首页北京网站设计师培训
  • 利用模板如何制作网站网线制作规范
  • 网站开发直播南京app推广公司
  • 心理咨询网站建设网站前瞻性 新流量机会内容建设分析
  • 小型网站建设公司网站seo优化服务商
  • 亚马逊如何做站外促销网站怎么建设网站空间和备案
  • php网站开发注意问题官方网站下载打印机驱动程序