当前位置: 首页 > Web前端 > JavaScript

使用javascript对leetcode6进行分类,Depthfirst&breadthfirst(图文和视频讲解)

时间:2023-03-27 00:02:26 JavaScript

depthfirst&breadthfirst动画过大,点击查看bfs:适用于层序遍历或者寻找最短路径。//bfs伪代码模板函数bfs(graph,start,end){queue=[];queue.append([开始]);visited.add(开始);while(queue)node=queue.pop();访问了.add(node);进程(节点);节点=生成相关节点(节点);queue.add(节点);}dfs://dfs伪代码模板//递归函数dfs(node,visited){visited.add(node);for(next_nodeinnode.children()){if(!next_nodeinvisited)dfs(next_node,visited);}}//非递归函数dfs(tree){if(tree.root===null){return[];}已访问,(stack=[]),[tree.node];while(stack)节点=stack.pop();visited.add(节点);进程(节点);nodes=generate_ralated_nodes(node);stack.push(nodes);}695.岛的最大面积(中等)给你一个大小为mxn的二进制矩阵网格。岛屿是一些相邻的1(代表陆地)的组合。这里的“相邻”要求两个1在水平或垂直四个方向上必须相邻。您可以假设网格的所有四个边都被零(代表水)包围。岛的面积是岛上值为1的单元格的数量。计算并返回网格中最大岛的面积。如果没有岛屿,则返回的面积为0。示例1:输入: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]]输出:6解释:答案不应该是11,因为岛屿只能包含水平的或1在这四个方向上垂直。示例2:输入:grid=[[0,0,0,0,0,0,0,0]]输出:0提示:m==grid.lengthn==grid[i].length1<=m,n<=50gridiis0or1来源:LeetCode链接:https://leetcode.cn/problems/max-area-of-island版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方法1.dfs思路:深度优先,先循环网格,当grid[x][y]===1时,将当前cell置0,不断上下左右递归,计算每一个的大小island,然后继续更新最大island复杂度:时间复杂度O(mn),其中m和n分别是网格的长和宽。空间复杂度O(mn),最大递归深度js:varmaxAreaOfIsland=function(grid){letrow=grid.length,col=grid[0].length;functiondfs(x,y){//越界判断当grid[x][y]===0时,直接返回if(x<0||x>=row||y<0||y>=col||grid[x][y]===0)返回0;grid[x][y]=0;//当grid[x][y]===1时,将当前单元格设为0letans=1,dx=[-1,1,0,0],dy=[0,0,1,-1];//方向数组for(leti=0;i0){let[x,y]=queue.shift();//保持出队列//越界判断if(x<0||x>=row||y<0||y>=col||grid[x][y]===0)继续;++curr;//更新岛屿个数grid[x][y]=0;//遍历的网格设置为0for(letk=0;k{constm=image.length;constn=image[0].length;constoldColor=image[sr][sc];如果(旧颜色==新颜色)返回图像;constfill=(i,j)=>{if(i<0||i>=m||j<0||j>=n||image[i][j]!=oldColor){返回;}image[i][j]=newColor;填充(我-1,j);填充(i+1,j);填充(我,j-1);填充(我,j+1);};填充(SR,SC);返回图像;};方法2.bfs复杂度:时间复杂度O(mn),m和n分别为网格的长度和宽度。空间复杂度O(mn),递归最大深度js:constfloodFill=(image,sr,sc,newColor)=>{constm=image.length;constn=image[0].length;constoldColor=image[sr][sc];如果(旧颜色==新颜色)返回图像;constqueue=[[sr,sc]];while(queue.length){const[i,j]=queue.shift();图像[i][j]=新颜色;如果(i-1>=0&&image[i-1][j]==oldColor)queue.push([i-1,j]);如果(i+1=0&&image[i][j-1]==oldColor)queue.push([i,j-1]);如果(j+1