算法day29

news2024/11/23 9:14:13

第一题

695. 岛屿的最大面积

        本题解法:采用bfs的算法;

        本题使用象限数组的遍历方法和定义布尔数组vis来遍历每一个元素的上下左右元素,防治被遍历的元素被二次遍历;

        本题具体分析如上题故事,但是由于要求区域的最大面积,所以在bfs方法中找到合适的元素进行入队列操作时,我们要对其个数进行统计;

至此,代码如下:

class Solution {
      //象限坐标数组
     int[] dx = {0,0,1,-1};
     int[] dy = {1,-1,0,0};
     boolean[][] vis = new boolean[51][51];
     int m,n;
    public int maxAreaOfIsland(int[][] grid) {
        m = grid.length;
        n = grid[0].length;
        int ret = 0;//统计最大面积
         for(int i = 0;i < m ;i++){
            for(int j = 0;j < n ;j++){
                if(grid[i][j] == 1 && !vis[i][j]){
                    ret = Math.max(ret,bfs(grid,i,j));
                    
                }
            }
        }
        return ret;
    }
     public int bfs(int[][] grid,int i,int j){
        int cot = 0;
        Queue<int[]> q = new LinkedList<>();
        q.add(new int[]{i,j});
        vis[i][j] = true;
        cot++;

        while(!q.isEmpty()){
            int[] t = q.poll();
            int a = t[0],b = t[1];
            for(int s = 0;s < 4;s++){
                int x = a +dx[s],y = b + dy[s];
                if(x >= 0 && x <m && y >= 0 && y < n && grid[x][y] == 1 && !vis[x][y]){
                    q.add(new int[]{x,y});
                    vis[x][y] = true;
                    cot++;
                }
            }       
        }
        return cot;
    }
}

第二题

130. 被围绕的区域

解法:bfs层序遍历

解题步骤如下:

步骤一:

        如上图所示,首先遍历第一行,最后一行,第一列,最后一列的元素,查找与其相邻的元素,并将这些元素o变成符号*;

步骤二:

        遍历整个图像中所有的元素,遇到的o字符变成x字符,遇到的*字符变成o字符,如此满足题意;

至此,代码如下:

class Solution {
        //象限坐标数组
     int[] dx = {0,0,1,-1};
     int[] dy = {1,-1,0,0};
     int m,n;
    public void solve(char[][] board) {
        m = board.length;
        n = board[0].length;
        //1、先处理边界的0,全部修改成*
        //修改第一行和最后一行
        for(int j = 0;j < n;j++){
            if(board[0][j] == 'O' ) bfs(board,0,j);
            if(board[m-1][j] == 'O' ) bfs(board,m-1,j);
        }
        //修改第一列和最后一列
         for(int i = 0;i < m;i++){
            if(board[i][0] == 'O' ) bfs(board,i,0);
            if(board[i][n-1] == 'O' ) bfs(board,i,n-1);
        }
        //2、还原,将剩下的0变成x,将边缘的*变为0
        for(int i = 0;i< m;i++){
            for(int j = 0;j < n ;j++){
                if(board[i][j] == 'O') board[i][j] = 'X';
                else if(board[i][j] == '*') board[i][j] = 'O';
            }
        }

    }
    public void bfs(char[][] board,int i,int j){
        Queue<int[]> q = new LinkedList<>();
        q.add(new int[]{i,j});
        board[i][j] = '*';

        while(!q.isEmpty()){
            int[] t = q.poll();
            int a = t[0],b = t[1];
            for(int s = 0;s < 4;s++){
                int x = a +dx[s],y = b + dy[s];
                if(x >= 0 && x <m && y >= 0 && y < n && board[x][y] == 'O' ){
                    board[x][y] = '*';
                    q.add(new int[]{x,y});
                }
            }       
        }
    }
}

第三题

1926. 迷宫中离入口最近的出口

本题的题目类型可以理解为边权为1的最短路问题;

        迷宫游戏,其数据结构模拟:一个迷宫矩阵,当每一个二维坐标相对性的字符为+,则是路障,坐标对应的字符为.,则表示是可以前进的路,当前我们所在的位置就是一个二维坐标对应的坐标;

        由于我们的安全出口的路线就是从给定的位置开始移动,移动到边界;且在所能到达安全出口的所有路线里面返回最短的路线(即最少的移动次数)

        我们在遍历当前位置的上下左右合法位置的时候采用的象限数组的方法,同时由于移动之后我们不能原路返回,所以采用定义布尔数组vis,给每一个遍历过的位置在该数组里面定义为true,防治二次遍历;

        我们将初识位置放于队列中,将该位置的上下左右位置都进行过遍历,每遍历到一个合法的位置,就将该位置放于队列中,且定义的统计移动次数的cot加一,当遍历到矩阵的边界时候,返回最短的cot变量;

        至此,代码如下:

class Solution {
      //象限坐标数组
     int[] dx = {0,0,1,-1};
     int[] dy = {1,-1,0,0};
    public int nearestExit(char[][] maze, int[] entrance) {
        int m= maze.length,n = maze[0].length;
        boolean[][] vis = new boolean[m][n];
        Queue<int[]> q = new LinkedList<>();
        q.add(new int[]{entrance[0],entrance[1]});
        vis[entrance[0]][entrance[1]]  = true;
        int step = 0;
        while(!q.isEmpty()){
            step++;
            int sz = q.size();
            for(int i = 0;i < sz;i++){
                int[] t = q.poll();
                int a = t[0],b = t[1];
                for(int j = 0;j<4;j++){
                    int x = a +dx[j],y = b + dy[j];
                    if(x >= 0 && x <m && y >= 0 && y < n && maze[x][y] == '.' && !vis[x][y]){
                        //判断是否已经走出出口
                        if(x == 0|| x == m-1 || y == 0 || y == n-1) return step;
                        q.add(new int[]{x,y});
                        vis[x][y] = true;
                    }
                }
            }
        }
        return -1;
    }
}

ps:本次的内容就到这里了,如果对你有所帮助的话,就请一键三连哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1821795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

爆肝三天,制作属于自己的地图——DAY3(地图数据发布详细教程)

4&#xff0c;重建顶层。 倾斜摄影数据的组织方式&#xff0c;一个 Data 目录下的 Tile 可能会成千上万&#xff0c;如果不使用重建顶层&#xff0c;那么输出的3DTiles的包围盒会非常非常多&#xff0c;增加加载时长。重建顶层&#xff0c;程序会根据瓦片的空间结构关系采用八…

opencv安装笔记 各种平台

目录 python安装opencv-python c 麒麟arm系统安装和用法 python安装opencv-python pypi上搜索 Search results PyPI 现在安装是一个版本&#xff0c;大于3.6都可以安装 c 麒麟arm系统安装和用法 参考&#xff1a; ffmpeg rknn麒麟系统 安装 opencv_ffmpeg4 解码示例-CSDN…

Vitis HLS 学习笔记--Vitis Accelerated Libraries介绍

1. 简介 Vitis Accelerated Libraries&#xff0c;包含很多现成的库&#xff0c;这些库都是开源的&#xff0c;也就是说代码是公开的&#xff0c;而且已经优化过&#xff0c;可以让程序运行得更快。你不需要改变太多你的代码&#xff0c;就能让你的程序速度提升。 这些库有很…

两个螺旋面的交线

已知轴截面齿形&#xff0c;先得到螺旋面 然后在计算出对应的端面齿形 在用端面齿形来计算和另一个螺旋面的相交曲线。 三维验证这个方法可行&#xff01;

react用ECharts实现组织架构图

找到ECharts中路径图。 然后开始爆改。 <div id{org- name} style{{ width: 100%, height: 650, display: flex, justifyContent: center }}></div> // data的数据格式 interface ChartData {name: string;value: number;children: ChartData[]; } const treeDep…

conda添加镜像源与channels

文章目录 一、conda下添加国内镜像源&#xff08;window下&#xff09;二、pip配置国内镜像源&#xff08;window下&#xff0c;临时修改&#xff09;三、conda源的定义 一、conda下添加国内镜像源&#xff08;window下&#xff09; 1、为【channels】配置清华镜像通道 直接在…

每日一题——Python实现PAT乙级1012 数字分类(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码优点 代码缺点 时间复杂度 空间复杂度 代码改进建议 我要更强 哲…

Docker部署常见应用之大数据基础框架Hadoop

文章目录 Hadoop简介主要特点核心组件生态系统 Docker Compose 部署集群参考文章 Hadoop简介 Hadoop是一个开源框架&#xff0c;由Apache软件基金会开发&#xff0c;用于在普通硬件构建的集群中存储和处理大量数据。它最初由Doug Cutting和Mike Cafarella创建&#xff0c;并受…

量化交易入门——盘口

今天接着上一期讲解开盘定势的种类&#xff0c;在讲之前&#xff0c;科普一下“盘口五档”的成交知识。 每个炒股软件上&#xff0c;都会有某只个股的成交信息&#xff0c;在其中会出现一个五档的行情列表&#xff0c;里面列出了买家和卖家各五个价格及其对应的数量。这五档价…

【单片机毕业设计选题24003】-基于STM32和阿里云的家庭安全监测系统

系统功能: 此设计采用STM32单片机采集环境温湿度,烟雾浓度和一氧化碳浓度显示在OLED上&#xff0c;并将这些信息上报至阿里云平台。 1. 上电连接手机热点后自动连接阿里云&#xff0c;可通过阿里云平台收到系统上报的温湿度&#xff0c;烟雾 浓度&#xff0c;一氧化碳数据以…

数字经济红利惠及全民,从掏钱消费到赚钱消费的转变,你准备好了吗?

伴随科技飞速发展&#xff0c;我们迎来了一个全新的经济时代——数字经济。数字经济以其独特的魅力&#xff0c;正为我们每个人带来前所未有的红利。 那么&#xff0c;面对数字经济的红利&#xff0c;我们是否已经做好了准备&#xff1f;我们又该如何把握这个时代赋予我们的机…

期末测试2(1)---PTA

一开始写错了&#xff0c; 因为这个再定义一个和原函数一样类型的进行存储&#xff0c; 然后将第一个设置为最大的&#xff0c;依次用循环比较后面的&#xff0c; 最后输出 但是这个适用于找最大的、字符串这样最后只输出一个最大项比较好 对于结构体不好将比较的这个数所…

学了这篇面试经,轻松收割网络安全的offer

网络安全面试库 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 0x1 应届生面试指南 网络安全面…

【课程总结】Day8(上):深度学习基本流程

前言 在上一篇课程《【课程总结】Day7&#xff1a;深度学习概述》中&#xff0c;我们了解到&#xff1a; 模型训练过程→本质上是固定w和b参数的过程&#xff1b;让模型更好→本质上就是让模型的损失值loss变小&#xff1b;让loss变小→本质上就是求loss函数的最小值&#xf…

SQL Server中的FOR XML PATH以及Split

前提 数据库是在2016年以下的版本&#xff0c;以上的版本&#xff0c;现在有最新的函数可以支持者两个了 Split 在c#中Split可以将以指定字符分割的字符串转换为字符串数组&#xff0c;这里主要是用于&#xff0c;主表存储了多个从表的id&#xff0c;存储的时候用的字符串&a…

企业级Flask项目移植记录【待补完】

背景 Flask项目A从老电脑C1移植到新电脑C2上 更新日志 1-240614上线第一版经验&#xff0c;博主关于这个项目包的问题还没有解决&#xff0c;正在解决中&#xff0c;但是整体思路大家在移植的时候可以借鉴。 思路 1-首先生产环境的python解释器等相关的东西最好严格保持一…

海康充电桩报文校验TCP校验和

1 TCP校验文档校验文档要求: 校验码描述 校验码计算范围包含包头标识、消息头和消息体,校验算法采用 TCP 和校验,具体规则如下。 将待校验的所有数据分为 16 位的字(大端序),如果总长度为奇数个字节,则在最后增添一个 位都为 0 的字节; 将所有 16 位的字进行累加,累加…

SemanticKITTI 拼接语义点云帧

文章目录 KITTISemanticKITTISemantic Segmentation and Panoptic SegmentationSemantic Scene Completion 数据转换语义标签和点云拼接 KITTI The odometry benchmark consists of 22 stereo sequences, saved in loss less png format: We provide 11 sequences (00-10) wit…

【等保资料】等级保护定级指南及网络安全解读(ppt原件)

新版网络安全等级保护定级指南网络安全等级保护工作的作用对象&#xff0c;主要包括基础信息网络、工业控制系统、云计算平台、物联网、使用移动互联技术的网络和大数据等。 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xf…

TVS管选择

在RS485和CAN电路设计中&#xff0c;经常要考虑“静电和浪涌保护”&#xff0c;怎么选择TVS管&#xff0c;很少有人讲解。 1、先了解TVS管 TVS管有单向管和双向管&#xff0c;通常后缀为CA的是双向TVS管&#xff0c;只有字母A的是单向TVS管。见下图&#xff1a; 2、TVS选择依…