【每日刷题】Day156

【每日刷题】Day156

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

1. 1020. 飞地的数量 - 力扣(LeetCode)

2. 1765. 地图中的最高点 - 力扣(LeetCode)

3. 1162. 地图分析 - 力扣(LeetCode)

1. 1020. 飞地的数量 - 力扣(LeetCode)

//思路:多源BFS

//题目问有多少陆地没法跨越边界,我们逆向思考:从边界上的陆地出发,能够到达哪些陆地。将能够到达的陆地标记为已访问。

//最后遍历原数组,遇到陆地并且没有被标记过,说明从边界的陆地没法到达这,结果+1。

class Solution {

public:

    int dx[4] = {1,-1,0,0};

    int dy[4] = {0,0,1,-1};

    int numEnclaves(vector<vector<int>>& grid)

    {

        int n = grid.size(),m = grid[0].size();

        vector<vector<bool>> hash(n,vector<bool>(m));

        queue<pair<int,int>> qu;

//遍历边界的陆地

        for(int i = 0;i<n;i++)

        {

            if(grid[i][0])

            {

                    qu.push({i,0});

                    hash[i][0] = true;

            }

            if(grid[i][m-1])

            {

                qu.push({i,m-1});

                hash[i][m-1] = true;

            }

        }

        for(int j = 0;j<m;j++)

        {

            if(grid[0][j])

            {

                qu.push({0,j});

                hash[0][j] = true;

            }

            if(grid[n-1][j])

            {

                qu.push({n-1,j});

                hash[n-1][j] = true;

            }

        }

        while(!qu.empty())

        {

            int size = qu.size();

            for(int i = 0;i<size;i++)

            {

                auto tmp = qu.front();

                qu.pop();

                for(int j = 0;j<4;j++)

                {

                    int x = tmp.first+dx[j],y = tmp.second+dy[j];

                    if(x>=0&&x<n&&y>=0&&y<m&&!hash[x][y]&&grid[x][y])

                    {

                        qu.push({x,y});

                        hash[x][y] = true;//标记从边界陆地能够到达的陆地

                    }

                }

            }

        }

        int ans = 0;

        for(int i = 0;i<n;i++)

            for(int j = 0;j<m;j++)

                if(grid[i][j]&&!hash[i][j]) ans++;//没有标记的陆地说明没法到达边界

        return ans;

    }

};

2. 1765. 地图中的最高点 - 力扣(LeetCode)

//思路:多源BFS

//将所有水域视为一个起点,同时向外扩展,每次上、下、左、右 扩展到陆地时,陆地的高度都 = 前一个位置的高度 + 1

class Solution {

public:

    int dx[4] = {1,-1,0,0};

    int dy[4] = {0,0,1,-1};

    vector<vector<int>> highestPeak(vector<vector<int>>& iw)

    {

        int n = iw.size(),m = iw[0].size();

        vector<vector<bool>> hash(n,vector<bool>(m));

        queue<pair<int,int>> qu;

        for(int i = 0;i<n;i++)//将所有水域入队列,并将水域的高度设为0

            for(int j = 0;j<m;j++)

                if(iw[i][j])

                {

                    iw[i][j] = 0;

                    qu.push({i,j});

                    hash[i][j] = true;

                }

        while(!qu.empty())

        {

            int size = qu.size();

            for(int i = 0;i<size;i++)

            {

                auto tmp = qu.front();

                int bx = tmp.first,by = tmp.second;//前一个位置

                qu.pop();

                for(int j = 0;j<4;j++)

                {

                    int x = bx+dx[j],y = by+dy[j];

                    if(x>=0&&x<n&&y>=0&&y<m&&!hash[x][y])

                    {

                        iw[x][y] = iw[bx][by]+1;//扩展到陆地时,当前位置高度 = 前一个位置高度 + 1

                        qu.push({x,y});

                        hash[x][y] = true;

                    }

                }

            }

        }

        return iw;

    }

};

3. 1162. 地图分析 - 力扣(LeetCode)

//思路:多源BFS

//本题直接做法是将所有 0(海洋)看作一个起点向外扩展,每次向外扩展一层计数器 sum++,当扩展到陆地时,前一个位置的距离 = sum。但是这个做法不太好,因为我们判断是否为陆地就是判断 值 == 1 || 值 > 0,但是如果我们将海洋的值修改为了距离 sum,sum一定 > 0 && sum == 1存在,这就会和陆地混淆。

//将所有的陆地看作一个起点向外扩展,同样的每扩展一层计数器 sum++。当扩展到海洋时,前一个位置的距离 = sum,这种做法比较好,我们判断是否扩展到海洋就是判断 值 == 0,陆地 = 1,sum的值也一定 > 0,因此不会混淆。

class Solution {

public:

    int dx[4] = {1,-1,0,0};

    int dy[4] = {0,0,1,-1};

    int maxDistance(vector<vector<int>>& grid)

    {

        int n = grid.size(),m = grid[0].size();

        vector<vector<bool>> hash(n,vector<bool>(m));

        queue<pair<int,int>> qu;

        int flag1 = 0,flag2 = 0;//flag1和flag2用于判断地图中是否只存在陆地 或者 海洋

        for(int i = 0;i<n;i++)

            for(int j = 0;j<m;j++)

            {

                if(grid[i][j])//将所有陆地视为一个起点

                {

                    qu.push({i,j});

                    hash[i][j] = true;

                    flag1 = 1;

                }

                else flag2 = -1;

            }

        if(flag1*flag2!=-1) return -1;//如果存在陆地和海洋,flag1*flag2就是 -1,否则只存在陆地 或者 海洋。

       

        int sum = 0;

        while(!qu.empty())

        {

            sum++;

            int size = qu.size();

            for(int i = 0;i<size;i++)

            {

                auto tmp = qu.front();

                int bx = tmp.first,by = tmp.second;

                qu.pop();

                for(int j = 0;j<4;j++)

                {

                    int x = bx+dx[j],y = by+dy[j];

                    if(x>=0&&x<n&&y>=0&&y<m&&!hash[x][y])

                    {

                        if(!grid[x][y]) grid[bx][by] = sum;//当扩展到海洋时,当前位置距离海洋的距离 = sum

                        qu.push({x,y});

                        hash[x][y] = true;

                    }

                }

            }

        }

        int ans = 0;

        for(int i = 0;i<n;i++)

            for(int j = 0;j<m;j++)

                ans = ans>grid[i][j]?ans:grid[i][j];//返回距离陆地最远的海洋的距离

        return ans;

    }

};

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

J.U.C - 深入解读Condition条件变量原理源码

文章目录 Pre概述Condition 主要方法Condition案例Condition的源码解析1. 等待&#xff1a;condition. await2. 唤醒Condition. signal Condition总结 Pre J.U.C - 深入解析ReentrantLock原理&源码 概述 配合synchronized同步锁在同步代码块中调用加锁对象notify和wait方…

c++ 类和对象(中)

前言 我们看看下面的代码以及代码运行结果 代码1 我们可以看到在我们的类Data中的函数成员print中&#xff0c;我们并没有设置形参&#xff0c;在调用此函数时&#xff0c;也并没有多余传参&#xff0c;但是我们调用它时&#xff0c;却能准确打印出我们的_year、_month、_day…

python:用 sklearn 构建 K-Means 聚类模型

pip install scikit-learn 或者 直接用 Anaconda3 sklearn 提供了 preprocessing 数据预处理模块、cluster 聚类模型、manifold.TSNE 数据降维模块。 编写 test_sklearn_3.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 构建 K-Means 聚类模型 "&…

使用python编写工具:快速生成chrome插件相关文件结构

本文将详细分析一段用 wxPython 编写的 Python 应用程序代码。该程序允许用户创建一些特定文件并将它们保存在指定的文件夹中&#xff0c;同时也能够启动 Google Chrome 浏览器并打开扩展页面&#xff0c;自动执行一些操作。 C:\pythoncode\new\crxiterationtaburl.py 全部代码…

使用Web Components构建模块化Web应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 引言 Web Co…

谷歌浏览器的自动翻译功能如何开启

在当今全球化的网络环境中&#xff0c;能够流畅地浏览不同语言的网页是至关重要的。谷歌浏览器&#xff08;Google Chrome&#xff09;提供了一项强大的自动翻译功能&#xff0c;可以帮助用户轻松跨越语言障碍。本文将详细介绍如何开启和使用谷歌浏览器的自动翻译功能&#xff…

算法---解决“汉诺塔”问题

# 初始化步骤计数器 i 1 # 定义移动盘子的函数 def move(n, mfrom, mto): global i # 使用全局变量i来跟踪步骤 print("第%d步:将%d号盘子从%s->%s" % (i, n, mfrom, mto)) # 打印移动步骤 i 1 # 步骤计数器加1 #第一种方法 # 定义汉诺塔问题的递归…

uniapp对接极光推送,实现消息推送功能

通过集成JG-JPush和JG-JCore插件&#xff0c;可以在应用中添加消息推送功能&#xff0c;向用户发送通知、消息等。这对于提升用户体验、增加用户粘性非常有帮助‌。 效果图&#xff1a; 一、登录极光官网 进入【服务中心】-【开发者平台】 创建应用&#xff1a;【概览】- 【创…

redis高性能键值数据库技术简介

什么是redis redis是远程字典服务&#xff08;Remote Dictionary Server &#xff09;的简写&#xff0c;是一个完全开源的高性能的Key-Value数据库&#xff0c;提供了丰富的数据结构如string、Hash、List、SetSortedset等等。数据是存在内存中的&#xff0c;同时Redis支持事务…

进程信号

目录 信号入门 1. 生活角度的信号 2. 技术应用角度的信号 3. 注意 4. 信号概念 5. 用kill -l命令可以察看系统定义的信号列表 6. 信号处理常见方式概览 产生信号 1. 通过终端按键产生信号 Core Dump 2. 调用系统函数向进程发信号 3. 由软件条件产生信号 4. 硬件异…

NotePad++中安装XML Tools插件

一、概述 作为开发人员&#xff0c;日常开发中大部的数据是标准的json格式&#xff0c;但是对于一些古老的应用&#xff0c;例如webservice接口&#xff0c;由于其响应结果是xml&#xff0c;那么我们拿到xml格式的数据后&#xff0c;常常会对其进行格式化&#xff0c;以便阅读。…

Java基础——多线程

1. 线程 是一个程序内部的一条执行流程程序中如果只有一条执行流程&#xff0c;那这个程序就是单线程的程序 2. 多线程 指从软硬件上实现的多条执行流程的技术&#xff08;多条线程由CPU负责调度执行&#xff09; 2.1. 如何创建多条线程 Java通过java.lang.Thread类的对象…

HarmonyOS ArkUI(基于ArkTS) 常用组件

一 Button 按钮 Button是按钮组件&#xff0c;通常用于响应用户的点击操作,可以加子组件 Button(我是button)Button(){Text(我是button)}type 按钮类型 Button有三种可选类型&#xff0c;分别为胶囊类型&#xff08;Capsule&#xff09;、圆形按钮&#xff08;Circle&#xf…

【FPGA开发】AXI-Stream总线协议解读

文章目录 AXI-Stream概述协议中一些定义字节定义流的定义 数据流类别字节流连续对齐流连续不对齐流稀疏流 协议的信号信号列表 文章为个人理解整理&#xff0c;如有错误&#xff0c;欢迎指正&#xff01; 参考文献 ARM官方手册 《IHI0051B》 AXI-Stream概述 协议中一些定义 A…

谷粒商城のMySQL集群分库分表

文章目录 前言一、MySQL的集群架构二、MySQL主从同步实践1.创建主节点实例2.创建从节点实例3.修改配置4.开始同步4.测试主从同步效果5.小结 三、MySQL分库分表1.配置sharding-proxy2.测试sharding-proxy3.小结 前言 本篇是谷粒商城集群部署篇&#xff0c;搭建MySQL集群以及分库…

计算机组成原理对于学习嵌入式开发的意义

计算机组成原理对于学习嵌入式开发的意义 前言 最近有位同学向我咨询&#xff0c;问学习嵌入式开发需不需要学习硬件&#xff1f;进而引申到了需不需要学习计算机组成原理呢&#xff1f; 正文 首先计算机组成原理是计算机科学与技术专业的一门核心基础课程&#xff0c;它深入…

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的&#xff0c;用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式&#xff1a; npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…

SpringBoot 2.2.10 无法执行Test单元测试

很早之前的项目今天clone现在&#xff0c;想执行一个业务订单的检查&#xff0c;该检查的代码放在test单元测试中&#xff0c;启动也是好好的&#xff0c;当点击对应的方法执行Test的时候就报错 tip&#xff1a;已添加spring-boot-test-starter 所以本身就引入了junit5的库 No…

多表查询综合归纳

目录 1. 多表关系 1.1 一对多&#xff08;多对一&#xff09; 1.2 多对多 1.3 一对一 2. 多表查询概述 2.1 熟悉表 2.2 笛卡尔积 2.3 消除笛卡尔积 2.4 多表查询分类 3. 内连接 3.1 隐式内连接 3.2 显式内连接 4. 外连接 4.1 左外连接 4.2 右外连接 5. 自连接 …

python爬虫(二)爬取国家博物馆的信息

import requests from bs4 import BeautifulSoup# 起始网址 url https://www.chnmuseum.cn/zx/xingnew/index_1.shtml # 用于存储所有数据 all_data [] page 1 global_index 1 # 定义全局序号变量并初始化为1 while True:html_url requests.get(url).textif requests.get…