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

floodfill+DFS(1)

文章目录

  • 图像渲染
  • 岛屿数量
  • 岛屿的最大面积
  • 被围绕的岛屿

图像渲染

class Solution {
public:int m = 0, n = 0;bool check[51][51] = {false};vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {m = image.size();n = image[0].size();int old = image[sr][sc];image[sr][sc] = color;dfs(image, sr, sc, color, old);return image;}void dfs(vector<vector<int>>& image, int sr, int sc, int color, int old){int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};for(int k = 0; k < 4; ++k){int x = sr + dx[k];int y = sc + dy[k];if(x >= 0 && y >= 0 && x < m && y < n && !check[x][y] && image[x][y] == old){int tmp = image[x][y];image[x][y] = color;check[x][y] = true;dfs(image, x, y,color, tmp);}}}
};

岛屿数量

class Solution {
public:bool check[301][301] = {false};int m = 0, n = 0;int numIslands(vector<vector<char>>& g) {m = g.size();n = g[0].size();int res = 0;for (int i = 0; i < m; ++i)for (int j = 0; j < n; ++j) {if (g[i][j] == '1' && !check[i][j]) {dfs(g, i, j);res++;}}return res;}void dfs(vector<vector<char>>& g, int i, int j) {check[i][j] = true;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};for (int k = 0; k < 4; ++k) {int x = i + dx[k];int y = j + dy[k];if (x >= 0 && y >= 0 && x < m && y < n && !check[x][y] && g[x][y] == '1')dfs(g, x, y);}}
};

岛屿的最大面积

class Solution {
public:bool check[51][51] = {false};int m = 0, n = 0;int path = 0;int maxAreaOfIsland(vector<vector<int>>& g) {m = g.size();n = g[0].size();int res = 0;for (int i = 0; i < m; ++i)for (int j = 0; j < n; ++j) {if (g[i][j] == 1 && !check[i][j]) {dfs(g, i, j);res = res > path ? res : path;path = 0;}}return res;}void dfs(vector<vector<int>>& g, int i, int j) {path += g[i][j];check[i][j] = true;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};for (int k = 0; k < 4; k++) {int x = i + dx[k];int y = j + dy[k];if (x >= 0 && y >= 0 && x < m && y < n && g[x][y] == 1 && !check[x][y])dfs(g, x, y);}}
};

被围绕的岛屿

法1:先从边界往内处理,将不可被围绕的地方标记;剩下的分为可被围绕部分以及围绕点,将可被围绕地方变成围绕点;再恢复标记点成不可围绕标记

class Solution {
public:int m = 0, n = 0;bool check[201][201] = {false};void solve(vector<vector<char>>& board) {m = board.size();n = board[0].size();for (int i = 0; i < m; ++i) {if (board[i][0] == 'O' && !check[i][0])dfs(board, i, 0);if (board[i][n - 1] == 'O' && !check[i][n - 1])dfs(board, i, n - 1);}for (int i = 0; i < n; ++i) {if (board[0][i] == 'O' && !check[0][i])dfs(board, 0, i);if (board[m - 1][i] == 'O' && !check[m - 1][i])dfs(board, m - 1, i);}for (int i = 0; i < m; ++i)for (int j = 0; j < n; ++j) {if (board[i][j] == '.')board[i][j] = 'O';else if (board[i][j] == 'O')board[i][j] = 'X';}}void dfs(vector<vector<char>>& board, int i, int j) {board[i][j] = '.';check[i][j] = true;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};for (int k = 0; k < 4; k++) {int x = i + dx[k];int y = j + dy[k];if (x >= 0 && y >= 0 && x < m && y < n && board[x][y] == 'O' && !check[x][y])dfs(board, x, y);}}
};

法二:每个 需要处理点 在四个方向上进行验证。该方法没有上一种方法简洁,故不做深究。

相关文章:

floodfill+DFS(1)

文章目录 图像渲染岛屿数量岛屿的最大面积被围绕的岛屿 图像渲染 class Solution { public:int m 0, n 0;bool check[51][51] {false};vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {m image.size…...

小程序开发设计-第一个小程序:注册小程序开发账号②

上一篇文章导航&#xff1a; 小程序开发设计-小程序简介①-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142217803?sharetypeblogdetail&sharerId142217803&sharereferPC&sharesourceqq_60872637&spm1011.2480.3001.8118 须知&#xff1a;不…...

C++基础面试题 | C++中的构造函数可以是虚函数吗? C++中的析构函数一定要是虚函数吗?

文章目录 问题一&#xff1a;在C中&#xff0c;构造函数不能是虚函数。问题二&#xff1a;析构函数不一定需要声明为虚函数&#xff0c;但在多态环境下&#xff0c;建议一定将其声明为虚函数。示例虚函数总结 问题一&#xff1a;在C中&#xff0c;构造函数不能是虚函数。 这是…...

Leetcode—1184. 公交站间的距离【简单】

2024每日刷题&#xff08;161&#xff09; Leetcode—1184. 公交站间的距离 实现代码 class Solution { public:int distanceBetweenBusStops(vector<int>& distance, int start, int destination) {int clockwise 0;int counterclockwise 0;if(start > desti…...

【python数据处理】保存网页

直觉上处理网页信息&#xff0c;很多人会先将网页保存成HTML&#xff0c;然后做文本分析。但这样做是不够的&#xff0c;因为网页可能内嵌图片&#xff0c;这些图片在HTML里就是一处链接&#xff0c;离线处理时无法还原&#xff0c;相当于丢失了图片信息。更好的做法是将整个网…...

智能体趋势:未来科技的核心驱动力

随着人工智能&#xff08;AI&#xff09;技术的不断发展&#xff0c;**智能体&#xff08;intelligent agents&#xff09;**逐渐成为当今科技发展的重要趋势。这些智能体不仅仅是软件&#xff0c;它们正在改变我们生活和工作的方式&#xff0c;成为推动科技和社会变革的核心力…...

学习笔记 韩顺平 零基础30天学会Java(2024.9.16)

P563 自定义泛型方法 当调用方法时&#xff0c;要传入参数&#xff0c;因为当传入参数时&#xff0c;编译器就可以确定泛型代表的类型 泛型方法和方法使用了泛型是不一样的 泛型方法可以使用类声明的泛型&#xff0c;也可以使用自己的泛型 P564 泛型方法练习 P565 泛型的继承和…...

python selenium网页操作

一、安装依赖 pip install -U seleniumselenium1.py&#xff1a; from selenium import webdriver from selenium.webdriver.common.by import Bydriver webdriver.Chrome() driver.get("https://www.selenium.dev/selenium/web/web-form.html") title driver.ti…...

pytorch使用技巧

pytorch使用技巧 1. 指定GPU编号 设置当前使用的GPU设备仅为0号设备&#xff0c;设备名称为 /gpu:0os.environ["CUDA_VISIBLE_DEVICES"] "0" 设置当前使用的GPU设备为0, 1号两个设备&#xff0c;名称依次为 /gpu:0、/gpu:1&#xff1a; os.environ[&quo…...

从用户数据到区块链:Facebook如何利用去中心化技术

在数字化时代&#xff0c;用户数据的管理和保护已成为科技公司面临的重大挑战。作为全球最大的社交网络平台之一&#xff0c;Facebook不仅在用户数据的处理上积累了丰富的经验&#xff0c;也在探索如何利用去中心化技术&#xff0c;如区块链&#xff0c;来改进其数据管理和用户…...

Elasticsearch之bool查询

bool 查询是 Elasticsearch 中最常用的复合查询类型&#xff0c;允许将多个查询组合在一起。它通过逻辑操作符&#xff08;如 must、should、must_not 和 filter&#xff09;来构建复杂的查询条件&#xff0c;从而满足多条件匹配、逻辑与&#xff08;AND&#xff09;、或&#…...

IntelliJ IDEA 创建 Java 项目指南

IntelliJ IDEA 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛用于 Java 开发。本文将介绍如何在 IntelliJ IDEA 中创建一个新的 Java 项目&#xff0c;包括环境的设置和基本配置。更多问题&#xff0c;请查阅 一、安装 IntelliJ IDEA 1. 下载 In…...

一起学Java(13)-[日志篇]教你分析SLF4J和Log4j2源码,掌握SLF4J与Log4j2桥接集成原理

研究完SLF4J和Logback这种无缝集成的方式(一起学Java(12)-[日志篇]教你分析SLF4J源码&#xff0c;掌握SLF4J如何与Logback无缝集成的原理)&#xff0c;继续研究Log4j2和SLF4J这种需要桥接集成的方式。 一、桥接包如何与SLF4J集成 我们已经知道SLF4J利用ServiceLoader机制&…...

深入Redis:核心的缓存

Redis最主要的用途&#xff0c;主要有三个方面&#xff1a;存储数据、缓存、消息队列。 其中&#xff0c;缓存是Redis最常用的场景。Redis使用内存作为硬盘的缓存。把用户集中访问的20%数据放到缓存中去&#xff0c;可以应对80%的请求。 数据库是非常重要的组件&#xff0c;但…...

集群聊天服务器项目【C++】项目介绍和环境搭建

前言&#xff1a;学习一个基于C集群聊天服务器的项目&#xff0c;记录学习的内容和学习的过程。 1.项目介绍 在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。 2.技术栈 Json序列…...

c++ #include <memory> 智能指针介绍

#include <memory> 是 C 标准库中的头文件&#xff0c;用于支持智能指针的功能。智能指针是现代 C 的一种资源管理工具&#xff0c;用于自动管理动态分配的内存&#xff0c;从而减少内存泄漏和悬挂指针等问题的发生。它提供了多种类型的智能指针&#xff0c;包括 std::un…...

32.递归、搜索、回溯之floodfill算法

0.简介 1.图像渲染 . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {int[] dx { 0, 0, 1, -1 };int[] dy { 1, -1, 0, 0 };int m, n;int prev;public int[][] floodFill(int[][] image, int sr, int sc, int color) {if (image[sr][sc]…...

Vue3.5+ 响应式 Props 解构

你好同学&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏、评论和关注。 在 Vue 3.5 中&#xff0c;响应式 Props 解构已经稳定并默认启用。这意味着在 <script setup> 中从 defineProps 调用解构的变量现在是响应式的。这一改进大大简化了声明带有默认值的 props 的方…...

k8s中的认证授权

目录 一、kubernetes API 访问控制 1.1 UserAccount与ServiceAccount 1.1.1 ServiceAccount 1.1.2 ServiceAccount示例 二、认证(在k8s中建立认证用户) 2.1 创建UserAccount 2.2 RBAC&#xff08;Role Based Access Control&#xff09; 2.2.1 基于角色访问控制授权&…...

Leetcode 3291. Minimum Number of Valid Strings to Form Target I

Leetcode 3291. Minimum Number of Valid Strings to Form Target I 1. 解题思路2. 代码实现 题目链接&#xff1a;3291. Minimum Number of Valid Strings to Form Target I 1. 解题思路 这一题第一反应就是用一个字典树动态规划的方式&#xff0c;倒是也搞定了&#xff0c…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...