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

算法学习——LeetCode力扣图论篇2

算法学习——LeetCode力扣图论篇2

在这里插入图片描述

1020. 飞地的数量

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

描述

给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。

一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。

返回网格中 无法 在任意次数的移动中离开网格边界的陆地单元格的数量。

示例

示例 1:
在这里插入图片描述

输入:grid = [[0,0,0,0],[1,0,1,0],[0,1,1,0],[0,0,0,0]]
输出:3
解释:有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。

示例 2:
在这里插入图片描述

输入:grid = [[0,1,1,0],[0,0,1,0],[0,0,1,0],[0,0,0,0]]
输出:0
解释:所有 1 都在边界上或可以到达边界。

提示

m == grid.length
n == grid[i].length
1 <= m, n <= 500
grid[i][j] 的值为 0 或 1

代码解析

class Solution {
public:int result = 0 , tmp_size = 1;int m =0 ,n=0;bool borad_flag = false;int dir[4][2] = {0,1, 0,-1 , -1,0 , 1,0};void dfs(vector<vector<int>>& grid , vector<vector<bool>> &path , int x , int y){for(int i=0 ; i<4 ;i++){int next_x = x + dir[i][0];int next_y = y + dir[i][1];if(next_x<0||next_x>=m||next_y<0||next_y>=n){borad_flag = true;continue;}if( path[next_x][next_y] == false && grid[next_x][next_y] == 1) {   tmp_size++;path[next_x][next_y] = true;dfs(grid,path,next_x,next_y);}}return;}int numEnclaves(vector<vector<int>>& grid) {m = grid.size();n = grid[0].size();vector<vector<bool>> path( m , vector<bool>( n ,false) );for(int i=0 ; i<m ;i++){for(int j=0 ; j<n ;j++){if(path[i][j] == false && grid[i][j] == 1){tmp_size = 1;borad_flag = false;path[i][j] = true;dfs(grid,path,i,j);if(borad_flag == false ) result += tmp_size;}}}return result;}
};

130. 被围绕的区域

130. 被围绕的区域 - 力扣(LeetCode)

描述

给你一个 m x n 的矩阵 board ,由若干字符 ‘X’ 和 ‘O’ ,找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。

示例

示例 1:
在这里插入图片描述

输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“X”]]
输出:[[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“X”,“X”,“X”],[“X”,“O”,“X”,“X”]]
解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

示例 2:

输入:board = [[“X”]]
输出:[[“X”]]

提示

m == board.length
n == board[i].length
1 <= m, n <= 200
board[i][j] 为 ‘X’ 或 ‘O’

代码解析

class Solution {
public:int m=0 , n=0;bool board_flag = false;int dir[4][2] = {0,-1,0,1,-1,0,1,0};void dfs(vector<vector<char>>& board ,  vector<vector<bool>> &path ,int x , int y ,bool exchange){   for(int i=0 ; i<4 ;i++){int next_x = x + dir[i][0];int next_y = y + dir[i][1];if(next_x<0 || next_x >= m || next_y<0||next_y>=n){board_flag = true;continue;}if(exchange == false && board[next_x][next_y] == 'O' && path[next_x][next_y] == false){path[next_x][next_y] = true;dfs(board,path,next_x,next_y,exchange);}if(exchange == true && board[next_x][next_y] == 'O'){board[next_x][next_y] = 'X';dfs(board,path,next_x,next_y,exchange);}}}void solve(vector<vector<char>>& board) {m = board.size();n = board[0].size();vector<vector<bool>> path(m,vector<bool>(n,false));for(int i=0 ; i<m ;i++){for(int j=0 ; j<n ;j++){if(board[i][j] == 'O' && path[i][j] == false){board_flag = false;path[i][j] = true;dfs(board,path,i,j,false);if(board_flag == false){board[i][j] = 'X';dfs(board,path,i,j,true);} }}}}
};

827. 最大人工岛

827. 最大人工岛 - 力扣(LeetCode)

描述

给你一个大小为 n x n 二进制矩阵 grid 。最多 只能将一格 0 变成 1 。

返回执行此操作后,grid 中最大的岛屿面积是多少?

岛屿 由一组上、下、左、右四个方向相连的 1 形成。

示例

示例 1:

输入: grid = [[1, 0], [0, 1]]
输出: 3
解释: 将一格0变成1,最终连通两个小岛得到面积为 3 的岛屿。

示例 2:

输入: grid = [[1, 1], [1, 0]]
输出: 4
解释: 将一格0变成1,岛屿的面积扩大为 4。

示例 3:

输入: grid = [[1, 1], [1, 1]]
输出: 4
解释: 没有0可以让我们变成1,面积依然为 4。

提示

n == grid.length
n == grid[i].length
1 <= n <= 500
grid[i][j] 为 0 或 1

代码解析

class Solution {
public:int m = 0 , n = 0;int dir[4][2] = {0,-1,0,1,-1,0,1,0};int tmp_sum = 1 , bolck_num = 1;void dfs(vector<vector<int>>& grid ,vector<vector<bool>> &path , int x ,int y ,int num ){for(int i=0 ; i<4 ;i++){int next_x = x + dir[i][0];int next_y = y + dir[i][1];if(next_x<0||next_x>=m||next_y<0||next_y>=n) continue;if(grid[next_x][next_y] == 1 && path[next_x][next_y] == false){tmp_sum++;grid[next_x][next_y] = num;dfs(grid,path,next_x,next_y,num);}}}int largestIsland(vector<vector<int>>& grid) {m = grid.size();n = grid[0].size();vector<vector<bool>> path(m,vector<bool>(n,false));map<int,int> my_map;for(int i=0 ; i<m ;i++){for(int j=0 ; j<n ;j++){if(grid[i][j] == 1 && path[i][j] == false){bolck_num++;path[i][j] = true;grid[i][j] = bolck_num;tmp_sum=1;dfs(grid,path,i,j,bolck_num);my_map[bolck_num] = tmp_sum;}}}int result = 0 , tmp_result = 1;for(int i=0 ; i<m ;i++){for(int j=0 ; j<n ;j++){if(grid[i][j] == 0 && path[i][j] == false){path[i][j] = true;tmp_result = 1;set<int> my_set;for(int k=0 ; k<4 ;k++){int next_x = i + dir[k][0];int next_y = j + dir[k][1];if(next_x<0||next_x>=m||next_y<0||next_y>=n) continue;if(grid[next_x][next_y] != 0 ) my_set.insert(grid[next_x][next_y]);}for(auto it = my_set.begin() ; it!=my_set.end();it++) tmp_result += my_map[*it];my_set.clear();if(tmp_result > result) result = tmp_result;}}}if(result == 0) return m*n;return result;}
};

相关文章:

算法学习——LeetCode力扣图论篇2

算法学习——LeetCode力扣图论篇2 1020. 飞地的数量 1020. 飞地的数量 - 力扣&#xff08;LeetCode&#xff09; 描述 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相…...

大数据设计为何要分层,行业常规设计会有几层数据

大数据设计通常采用分层结构的原因是为了提高数据管理的效率、降低系统复杂度、增强数据质量和可维护性。这种分层结构能够将数据按照不同的处理和应用需求进行分类和管理&#xff0c;从而更好地满足不同层次的数据处理和分析需求。行业常规设计中&#xff0c;数据通常按照以下…...

css3之2D转换transform

2D转换transform 一.移动&#xff08;translate)(中间用&#xff0c;隔开&#xff09;二.旋转&#xff08;rotate)&#xff08;有单位deg)1.概念2.注意点3.转换中心点&#xff08;transform-origin)&#xff08;中间用空格&#xff09;4.一些例子(css三角和旋转&#xff09; 三…...

pytest中文使用文档----6临时目录和文件

1. 相关的fixture 1.1. tmp_path1.2. tmp_path_factory1.3. tmpdir1.4. tmpdir_factory1.5. 区别 2. 默认的基本临时目录 1. 相关的fixture 1.1. tmp_path tmp_path是一个用例级别的fixture&#xff0c;其作用是返回一个唯一的临时目录对象&#xff08;pathlib.Path&#xf…...

从0开始搭建基于VUE的前端项目

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(vue/cli 5.0.8) ,参考&#xff08;https://cli.vuejs.org/zh/&#xff09;vue版本&#xff08;2.7.16&#xff09;&#xff0c;vue2的最后一个版本 初始化项目 创建一个git项目&#xff08;可以去gitee/github上创建&#xff…...

elementUI this.$msgbox msgBox自定义 样式自定义 富文本

看这个效果是不是很炫?突出重点提示内容,对于用户交互相当的棒! 下来说说具体实现: let self = this const h = self.$createElement; this.$msgbox({title: null,message: h("p", {style: "margin-top:10px"}, [h("i", {class: "el-i…...

Lua与Python区别

Lua和Python都是流行的编程语言&#xff0c;但它们在设计哲学、应用领域和性能特点上有所不同。以下是Lua和Python之间的对比&#xff1a; 1. **设计哲学**: - Lua被设计为一个轻量级的嵌入式脚本语言&#xff0c;重点在于简单性和效率。它有一个小巧的标准库&#xff0c;通…...

Python学习(二)

数据容器 数据容器根据特点的不同&#xff0c;如&#xff1a; 是否支持重复元素是否可以修改是否有序&#xff0c;等 分为5类&#xff0c;分别是&#xff1a; 列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字符串&#xff08;str&#xff09;、集…...

管理阿里云服务器ECS -- 网站选型和搭建

小云&#xff1a;我已经学会了如何登录云服务器ECS了&#xff0c;但是要如何搭建网站呢&#xff1f; 老王&#xff1a;目前有很多的个人网站系统软件&#xff0c;其中 WordPress 是使用非常广泛的一款&#xff0c;而且也可以把 WordPress 当作一个内容管理系统&#xff08;CMS…...

WPF中继承ItemsControl子类控件数据模板获取选中属性

需求场景 列表类控件&#xff0c;如 ListBox、ListView、DataGrid等。显示的行数据中&#xff0c;部分内容依靠选中时触发控制&#xff0c;例如选中行时行记录复选&#xff0c;部分列内容控制显隐。 案例源码以ListView 为例。 Xaml 部分 <ListView ItemsSource"{Bi…...

Android卡顿掉帧问题分析之实战篇

本文将结合典型实战案例&#xff0c;分析常见的造成卡顿等性能问题的原因。从系统工程师的总体角度来看 &#xff0c;造成卡顿等性能问题的原因总体上大致分为三个大类&#xff1a;一类是流程执行异常&#xff1b;二是系统负载异常&#xff1b;三是编译问题引起。 1 流程执行异…...

OpenKylin安装Kafka

一、操作系统 openKylin 1.0.1 X86 二、下载安装包 # 安装依赖jdk sudo apt-get update sudo apt-get install default-jdk # 下载kafka mkdir -p /data/software/kafka wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz三、解压安装 # 解压缩Kafka…...

嵌入式硬件中常见的面试问题与实现

1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…...

【Node.JS】koa

文章目录 概述koa和express对比koa下载安装使用1.创建koa项目文件目录2. 创建koa服务3. 添加路由 koa-router4. 数据库服务 mongodb5. 添加请求参数json处理 koa-bodyparser6. 用户接口举例7.引入koa一些常用插件8.用户登录验证 koa-jwt9.webpack生产打包 来源 概述 Koa 是一个…...

工作日志- 不定期更新

1. protobuf中使用import引用其他proto文件&#xff0c;生成后在go语言的go modules中import 包名报错问题。 public.proto文件 //protoc --go_outpluginsgrpc:. public.proto syntax "proto3";package public;option go_package "self/game-service/msg/pu…...

Qt使用opencv打开摄像头

1.效果图 2.代码 #include "widget.h"#include <QApplication>#include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>#include <QImage> #include <QLabel> #incl…...

Redis的Hash数据结构中100万对field和value,field是自增时如何优化?优化Hash结构。

ZipList使用是有条件的&#xff0c;当entry数据量太大时就会启用哈希结构&#xff0c;占用内存空间 1.设置bigkey的上限 在redis.config中设置 2.拆分为string类型 String底层结果没有太多优化&#xff0c;占用内存多 想要批量获取数据麻烦 3.拆分为小的hash 将id/100作为…...

二十四种设计模式与六大设计原则(一):【策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式】的定义、举例说明、核心思想、适用场景和优缺点

目录 策略模式【Strategy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 代理模式【Proxy Pattern】 定义 举例说明 核心思想 适用场景 优缺点 单例模式【Singleton Pattern】 定义 举例说明 核心思想 适用场景 优缺点 多例模式【Multition Pattern】…...

mac怎么删除python

mac 默认安装了python2&#xff1b;自己后面又安装了python3&#xff1b;为了方便&#xff0c;现在想将python3换成Anaconda3。 Anaconda是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包及其依赖项。 Python3安装之后&#xff0c;在系统中不同目…...

【笔记】Android U RILJ 中与运营商名称SPN显示相关的日志分析

源码阅读&#xff1a;AOSPXRef 常用日志关键字 Note&#xff1a;">"下发MD&#xff0c;"<"MD上报&#xff0c;[]中的id有请求和返回的对应关系 KEYComment> OPERATOR下发MD&#xff0c;请求运营商信息< OPERATORMD上报运营商注册信息> DA…...

蓝桥杯【奇怪的捐赠】c语言

我会将这题的解题的核心思路解为将10进制转化成7进制&#xff0c;毕竟题目上说的很清楚7的几次方 然后附上我认为的最优解 #include<stdio.h> int main() {int n 1000000;int sum 0;while (n ! 0){int a;a n % 7;n n / 7;sum a ;}printf("%d", sum);retu…...

【3月比赛合集】5场可报名的「创新应用」、「数据分析」和「程序设计」大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 创新应用赛&#xff08;2场比赛&#xff09;数据分析赛&#…...

vue3 视频播放功能整体复盘梳理

回顾工作中对视频的处理&#xff0c;让工作中处理的问题的经验固化成成果&#xff0c;不仅仅是完成任务&#xff0c;还能解答任务的知识点。 遇到的问题 1、如何隐藏下载按钮&#xff1f; video 标签中的controlslist属性是可以用来控制播放器上空间的显示&#xff0c;在原来默…...

vue-ueditor-wrap上传图片报错:后端配置项没有正常加载,上传插件不能正常使用

如图所示&#xff0c;今天接收一个项目其中富文本编辑器报错 此项目为vue2项目&#xff0c;富文本编辑器为直接下载好的资源存放在public目录下的 经过排查发现报错的函数在ueditor.all.min.js文件内&#xff0c;但是ueditor.all.min.js文件夹是经过压缩的 所以直接&#xff…...

数据仓库的发展历程

数据仓库的概念可以追溯到20世纪60年代,但真正形成理论并被企业广泛应用还需要一个较长的发展过程。大致可以分为以下几个阶段: 决策支持系统(DSS)时期(1960s-1970s) 这一时期,随着管理信息系统(MIS)和电子计算机的兴起,企业开始尝试构建面向决策的数据处理系统。最初的决策支…...

MySQL开窗函数

测试环境&#xff1a;mysql8.0.18 官方文档&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/window-functions.html 一、窗口函数介绍二、语法结构三、自定义窗口1.rows&#xff08;重点&#xff09;2.range3.默认窗口 四、常用窗口函数示例1.row_number & rank &…...

Java学习笔记(23)

多线程 并发 并行 多线程实现方式 1.继承Thread类 自己创建一个类extends thread类 Start方法开启线程&#xff0c;自动执行重写之后的run方法 2.实现runable接口 自己创建一个类implements runnable Myrun不能直接使用getname方法&#xff0c;因为这个方法是thread类的方法…...

nodejs下载安装以及npm、yarn安装及配置教程

1、nodejs下载安装 ​ 1.1、使用nodejs版本管理工具下载安装&#xff0c;可一键安装、切换不同nodejs版本&#xff0c; nvm-setup.zip&#xff1a;安装版&#xff0c;推荐使用 本次演示的是安装版。 1、双击安装文件 nvm-setup.exe 选择nvm安装路径 例如&#xff1a;E:\Soft…...

Playwright库page.evaluate()方法执行JavaScript 表达式

page.evaluate() 方法是 Playwright 中常用的方法之一&#xff0c;用于在页面上下文中执行 JavaScript 代码。它允许在浏览器环境中执行各种操作&#xff0c;如操作 DOM 元素、获取页面数据、执行复杂的计算等&#xff0c;并将结果返回到 Node.js 或 Python 代码中。 在 Playw…...

【微服务】OpenFeign+Sentinel集中处理远程调用异常

文章目录 1.微服务基本环境调整1.对10004模块的application.yml调整2.启动nacos以及一个消费者两个提供者3.测试1.输入http://localhost:8848/nacos/index.html 来查看注册情况2.浏览器访问 http://localhost:81/member/nacos/consumer/get/13.结果 2.使用OpenFeign实现微服务模…...

软件技术专业专升本考试科目/免费检测网站seo

蝴蝶操作和Rader排序 蝴蝶操作的定义&#xff1a; 雷德(Rader)算法 (Gold Rader bit reversal algorithm) 按自然顺序排列的二进制数&#xff0c;其下面一个数总是比其上面一个数大1&#xff0c;即下面一个数是上面一个数在最低位加1并向高位进位而得到的。而倒位序二进制数的下…...

电子商务网购网页设计毕业论文/seo流量软件

2019独角兽企业重金招聘Python工程师标准>>> 最近从渗透开始研究渗透研究了很久仅限于知道一些扫描工具和简单入门谈不上的使用和方法。之前的回头在补渗透吧。有关国际化有关python的文件处理每行脚本的编辑和正则处理。还有eclipse的插件ResourceBundleEditor_v0.…...

discuz可以做公司网站/发稿服务

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼public List> findMovieByType(String moviename,String type,String spinnerActor,String spinnerYear,String television,int pageNum,int numSize){int m (pageNum-1)*DbUtil.page_Num;List> movieTypeList new ArrayLi…...

北京网站制作多少钱/百度竞价推广投放

用户 sa 登录失败。该用户与可信 SQL Server 连接无关联。 说明: 执行当前 Web 请求期间&#xff0c;出现未处理的异常。请检查堆栈跟踪信息&#xff0c;以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 用户 sa 登…...

银川网站建设价格/百度推广关键词和创意

1. 支持手机、pad等移动设备远程控制功能。2、支持DLNA、Airplay、QPaly等协议。3、Cortex-A9四核&#xff0c;7寸电容触摸屏&#xff0c;1024*600高清分辨屏&#xff0c;标配通用的网络接口&#xff0c;内置wifi无线连接。4、功率&#xff1a;35W*45、4声道输出&#xff0c;支…...

网站在建设中是什么意思/交换链接的其它叫法是

1、Ext2文件系统规划(参照《鸟哥Linux私房菜基础篇》)磁盘分区后进行格式化&#xff0c;这时文件系统会将inode与block规划好&#xff0c;除非再次进行格式化&#xff0c;否则不会改变。但是如今的文件系统很大&#xff0c;有的高达几百G&#xff0c;这样会是的inode与block的数…...