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

图论【Lecode_HOT100】

文章目录

        • 1.岛屿数量No.200
        • 2.腐烂的橘子No.994
        • 3.课程表No.207
        • 4.实现Trie(前缀树)No.208

1.岛屿数量No.200

image-20241209160907171

class Solution {public int numIslands(char[][] grid) {if (grid == null || grid.length == 0) {return 0;}int numIslands = 0;int rows = grid.length;int cols = grid[0].length;// 遍历每个格子for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {// 如果当前格子是陆地if (grid[i][j] == '1') {numIslands++; // 找到一个新岛屿dfs(grid, i, j); // 将与之相连的所有陆地标记为已访问}}}return numIslands;}private void dfs(char[][] grid, int i, int j) {int rows = grid.length;int cols = grid[0].length;// 边界条件:超出网格范围或当前格子不是陆地if (i < 0 || i >= rows || j < 0 || j >= cols || grid[i][j] == '0') {return;}// 将当前格子标记为已访问grid[i][j] = '0';// 递归搜索上下左右的相邻格子dfs(grid, i + 1, j); // 下dfs(grid, i - 1, j); // 上dfs(grid, i, j + 1); // 右dfs(grid, i, j - 1); // 左}
}
2.腐烂的橘子No.994

image-20241209171944090

image-20241209171956967

  • 思路
    • 先把1和2的橘子找出来,并为1的橘子计数,将2的橘子放入队列中
    • 如果为1的橘子个数等于0,直接返回
    • 定义四个腐蚀的方向
    • 开始BFS,遍历当前所有为2的橘子,并且在四个方向扩展,然后判断是否可以腐蚀,并将腐蚀的橘子放入队列
    • 如果当前层腐蚀,boolean变量变为ture,时间+1;
    • 当遍历完所有腐蚀的橘子,还有新鲜橘子返回-1.否则返回分钟数。
import java.util.LinkedList;
import java.util.Queue;public class Solution {public int orangesRotting(int[][] grid) {if (grid == null || grid.length == 0) {return -1;}int rows = grid.length;int cols = grid[0].length;Queue<int[]> queue = new LinkedList<>();int freshCount = 0;// 初始化队列和新鲜橘子计数for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {if (grid[i][j] == 2) {queue.offer(new int[]{i, j});} else if (grid[i][j] == 1) {freshCount++;}}}// 如果没有新鲜橘子,直接返回 0if (freshCount == 0) {return 0;}// 定义四个方向int[][] directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};int minutes = 0;// 开始 BFSwhile (!queue.isEmpty()) {int size = queue.size();boolean hasRotten = false;// 遍历当前层的所有腐烂橘子for (int i = 0; i < size; i++) {int[] current = queue.poll();int x = current[0];int y = current[1];// 扩展到四个方向for (int[] direction : directions) {int newX = x + direction[0];int newY = y + direction[1];// 判断是否可以腐蚀if (newX >= 0 && newX < rows && newY >= 0 && newY < cols && grid[newX][newY] == 1) {grid[newX][newY] = 2; // 腐蚀queue.offer(new int[]{newX, newY});freshCount--;hasRotten = true;}}}// 如果当前层有腐蚀,时间加 1if (hasRotten) {minutes++;}}// 判断是否还有新鲜橘子return freshCount == 0 ? minutes : -1;}
}
3.课程表No.207

image-20241210115817848

  • 本质:判断有向图中是否存在环

  • 思路:拓扑排序

    • 使用一个邻接表表示图
    • 使用一个入度数组,记录每个课程的前驱节点数量
    • 将所有入度为0的节点加入队列
    • 依次从队列中取出节点,并将其相邻节点的入度减1:
      • 如果相邻节点入度变为0,将其加入队列
    • 最终,如果处理的节点数量等于课程总数,则可以完成课程,否则存在环
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;public class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {// 构建邻接表和入度数组List<List<Integer>> graph = new ArrayList<>();int[] indegree = new int[numCourses];for (int i = 0; i < numCourses; i++) {graph.add(new ArrayList<>());}for (int[] pre : prerequisites) {graph.get(pre[1]).add(pre[0]);indegree[pre[0]]++;}// 将所有入度为 0 的节点加入队列Queue<Integer> queue = new LinkedList<>();for (int i = 0; i < numCourses; i++) {if (indegree[i] == 0) {queue.offer(i);}}// 拓扑排序int count = 0;while (!queue.isEmpty()) {int course = queue.poll();count++;for (int next : graph.get(course)) {indegree[next]--;if (indegree[next] == 0) {queue.offer(next);}}}// 如果处理的节点数量等于课程总数,说明可以完成所有课程return count == numCourses;}
}
4.实现Trie(前缀树)No.208

image-20241210215239767

image-20241210215252572

class Trie {Node root;public Trie() {root = new Node();}public void insert(String word) {Node p = root;for(int i = 0;i < word.length();i ++){int u = word.charAt(i) - 'a';if(p.son[u] == null) p.son[u] = new Node();p = p.son[u]; }p.is_end = true;}public boolean search(String word) {Node p = root;for(int i = 0;i < word.length();i ++){int u = word.charAt(i) - 'a';if(p.son[u] == null) return false;p = p.son[u]; }return p.is_end;}public boolean startsWith(String prefix) {Node p = root;for(int i = 0;i < prefix.length();i ++){int u = prefix.charAt(i) - 'a';if(p.son[u] == null) return false;p = p.son[u]; }return true;}
}
class Node 
{boolean is_end;Node[] son = new Node[26];Node(){is_end = false;for(int i = 0;i < 26;i ++)son[i] = null;} 
}
/*** Your Trie object will be instantiated and called as such:* Trie obj = new Trie();* obj.insert(word);* boolean param_2 = obj.search(word);* boolean param_3 = obj.startsWith(prefix);*/···

相关文章:

图论【Lecode_HOT100】

文章目录 1.岛屿数量No.2002.腐烂的橘子No.9943.课程表No.2074.实现Trie&#xff08;前缀树&#xff09;No.208 1.岛屿数量No.200 class Solution {public int numIslands(char[][] grid) {if (grid null || grid.length 0) {return 0;}int numIslands 0;int rows grid.len…...

day10性能测试(2)——Jmeter

【没有所谓的运气&#x1f36c;&#xff0c;只有绝对的努力✊】 目录 1、LoadRunner vs Jmeter 1.1 LoadRunner 1.2 Jmeter 1.3 对比小结 2、Jmeter 环境安装 2.1 安装jdk 2.2 安装Jmeter 2.3 小结 3、Jmeter 文件目录结构 4、Jmeter默认配置修改 5、Jmeter元件、组…...

Y3编辑器文档4:触发器

文章目录 一、触发器简介1.1 触发器界面1.2 ECA语句编辑及快捷键1.3 参数设置1.4 变量设置1.5 实体触发器1.6 函数库与触发器复用 二、触发器的多层结构2.1 子触发器&#xff08;在游戏内对新的事件进行注册&#xff09;2.2 触发器变量作用域2.3 复合条件2.4 循环2.5 计时器2.6…...

1. 机器学习基本知识(3)——机器学习的主要挑战

1.5 机器学习的主要挑战 1.5.1 训练数据不足 对于复杂问题而言&#xff0c;数据比算法更重要但中小型数据集仍然很普遍&#xff0c;获得额外的训练数据并不总是一件轻而易举或物美价廉的事情&#xff0c;所以暂时不要抛弃算法。 1.5.2 训练数据不具有代表性 采样偏差&#…...

prometheusgrafana实现监控告警

Prometheus负责集群数据的监控和采集&#xff0c;然后传递给grafana进行可视化&#xff0c;集成睿象云可实现监控报警&#xff0c;为了方便操作&#xff0c;可以通过iframe嵌套grafana到指定的页面。 文章目录 1.Grafana集成Prometheus2.iframe内嵌grafana3.监控告警 1.Grafana…...

Ubuntu防火墙管理(五)——ufw源规则解读与修改

firewalld与nftables 在 /etc/firewalld/firewalld.conf 文件中&#xff0c;FirewallBackend 选项用于指定 Firewalld 使用的防火墙后端实现。具体来说&#xff1a; nftables&#xff1a;这是当前的默认选项&#xff0c;表示 Firewalld 将使用 nftables 作为防火墙后端。nftab…...

Docker如何运行一个python脚本Hello World

Docker如何运行一个python脚本Hello World 1、编写Python的Hello World&#xff1a;script.py #!/usr/bin/python #_*_coding:utf-8_*_ print("Hello World") 2、Dockerfile文件 #拉取Docker环境 FROM python #设置工作目录 WORKDIR /app #将dockerfile同级文件copy到…...

人工智能-自动驾驶领域

目录 引言自动驾驶与人工智能的结合为什么自动驾驶领域适合发表文章博雅智信的自动驾驶辅导服务结语 引言 自动驾驶技术的崛起是当代交通行业的一场革命。通过结合先进的人工智能算法、传感器技术与计算机视觉&#xff0c;自动驾驶不仅推动了技术的进步&#xff0c;也使得未来…...

[ubuntu18.04]ubuntu18.04安装json-c操作说明

ubuntu18.04安装json-c 代码下载 rootw1804-virtual-machine:/home/w1804/tr069# git clone https://github.com/json-c/json-c.git Cloning into /opt/git/json-c... remote: Enumerating objects: 6398, done. remote: Counting objects: 100% (1067/1067), done. remote:…...

华为eNSP:VRRP

一、VRRP背景概述 在现代网络环境中&#xff0c;主机通常通过默认网关进行网络通信。当默认网关出现故障时&#xff0c;网络通信会中断&#xff0c;影响业务连续性和稳定性。为了提高网络的可靠性和冗余性&#xff0c;采用虚拟路由冗余协议&#xff08;VRRP&#xff09;是一种…...

Linux--top系统资源命令查看--详解

top命令用法 图&#xff1a; top命令用法&#xff1a; top命令经常用来监控linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用情况。 top的使用方式&#xff1a; top [-d number] | top [-bnp] top参数解释&#xff1a; -…...

es的join是什么数据类型

在 Elasticsearch 中,parent 并不是一个独立的数据类型,而是与 join 数据类型一起使用的一个概念。join 数据类型用于在同一个索引中建立父子文档之间的关系,允许你在一个索引内表示层级结构或关联关系。通过 join 字段,你可以定义不同类型的文档(如父文档和子文档),并指…...

KV Shifting Attention Enhances Language Modeling

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.19574&#x1f465; 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen&#x1f3f7;️ 关键词: KV shifting attention, induction heads, language modeling&#x1f4da; 分类: 机器学习, 自然语言处…...

软错误防护技术在车规MCU中应用

在大气层内&#xff0c;宇宙射线粒子与大气分子发生核反应生成大气中子。大气中子入射微电子器件或电路将会诱发单粒子效应&#xff08;SEE&#xff09;&#xff0c;效应类型主要有单粒子翻转&#xff08;SEU&#xff09;、单粒子瞬态&#xff08;SET&#xff09;、单粒子锁定&…...

遥感图像处理二(ENVI5.6 Classic)

1 实验目的和内容 1.1 实验目的 本次上机旨在继续深入了解ENVI软件的基本使用&#xff0c;并对提供的实验数据进行基本的图像分割和地物分类等操作并分析结果。 1.2 实验内容 1.2.1 图像分割 对教材示例数据“C7图像分割”中的风景图、兰花图和娃娃图分别进行图像分割操作…...

经典文献阅读之--A Fast Dynamic Point Detection...(用于驾驶场景中的动态点云剔除方法)

0. 简介 现有的基于3D点的动态点检测和移除方法存在显著的时间开销&#xff0c;使其难以适应激光雷达-惯性测程系统。《A Fast Dynamic Point Detection Method for LiDAR-Inertial Odometry in Driving Scenarios》提出了一种基于标签一致性的动态点检测和移除方法&#xff0…...

百度搜索应适用中文域名国家标准,修复中文网址展示BUG

12月1日中文域名国家标准正式实施。该标准“明确了中文域名在编码、解析、注册、字表等方面的技术要求&#xff0c;适用于中文域名注册管理机构、注册服务机构、网络软硬件服务商及终端用户”。 00:23 显然&#xff0c;百度作为网络软硬件服务商&#xff0c;是包括在国家标准的…...

设计模式学习之——适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;&#xff0c;又称作变压器模式&#xff08;因为这两者都体现了“转换”或“适配”的核心概念&#xff09;&#xff0c;是一种结构型设计模式。它将一个类的接口转换成客户端所期望的另一种接口&#xff0c;从而使得原本因接口…...

服务器数据恢复—热备盘上线过程中硬盘离线导致raid5阵列崩溃的数据恢复案例

服务器数据恢复环境&#xff1a; 两组分别由4块SAS接口硬盘组建的raid5阵列&#xff0c;两组raid5阵列划分LUN并由LVM管理&#xff0c;格式化为EXT3文件系统。 服务器故障&#xff1a; RAID5阵列中一块硬盘未知原因离线&#xff0c;热备盘自动激活上线替换离线硬盘。在热备盘上…...

MetaGPT源码 (Memory 类)

目录 MetaGPT源码&#xff1a;Memory 类例子 MetaGPT源码&#xff1a;Memory 类 这段代码定义了一个名为 Memory 的类&#xff0c;用于存储和管理消息(Message)对象。Memory 提供了多种操作消息的功能&#xff0c;包括添加单条或批量消息、按角色或内容筛选消息、删除最新消息…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...

深入浅出Diffusion模型:从原理到实践的全方位教程

I. 引言&#xff1a;生成式AI的黎明 – Diffusion模型是什么&#xff1f; 近年来&#xff0c;生成式人工智能&#xff08;Generative AI&#xff09;领域取得了爆炸性的进展&#xff0c;模型能够根据简单的文本提示创作出逼真的图像、连贯的文本&#xff0c;乃至更多令人惊叹的…...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...