【LeetCode Hot100】图论篇

前言

        本文用于整理LeetCode Hot100中题目解答,因题目比较简单且更多是为了面试快速写出正确思路,只做简单题意解读和一句话题解方便记忆。但代码会全部给出,方便大家整理代码思路。


200. 岛屿数量

一句话题意

        求所有上下左右的‘1’的连通块数量。

一句话题解

        DFS or BFS 搜一下就行了。

class Solution {int[][] fx = {{1,0},{0,1},{-1,0},{0,-1}};int n;int m;char[][] grid;void dfs(int x,int y){grid[x][y]='0';for(int i=0;i<4;i++){int xx=x+fx[i][0];int yy=y+fx[i][1];if(xx<0||xx>=n||yy<0||yy>=m||grid[xx][yy]=='0')continue;dfs(xx,yy);}}public int numIslands(char[][] grid) {this.grid=grid;int ans=0;n=grid.length;m=grid[0].length;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(grid[i][j]=='1'){dfs(i,j);ans++;}}}return ans;}
}

994. 腐烂的橘子

一句话题意

        给定一个二维数组,二维数组上的每个2为一个烂掉的橘子,1为正常橘子,0为空位。每个坏橘子会每秒向周围四个方向腐烂好的橘子,空位不能传播,问最少多少时间全坏。

一句话题解

        多源点广搜,将所有坏的橘子放进去,没搜到一个好的橘子就让他变坏,然后接着搜即可。

class Solution {class Node {int x,y,t;Node(int x,int y,int t){this.x=x;this.y=y;this.t=t;}}public int orangesRotting(int[][] grid) {Queue<Node> q = new LinkedList<>();int ans=0;int sum=0;int n=grid.length;int m=grid[0].length;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(grid[i][j]==2)q.add(new Node(i,j,0));else if(grid[i][j]==1)sum++;}}int[][] fx={{1,0},{0,1},{-1,0},{0,-1}};while(q.size()>0){Node o = q.poll();ans=Math.max(ans,o.t);if(sum==0)continue;for(int i=0;i<4;i++){int xx=o.x+fx[i][0];int yy=o.y+fx[i][1];if(xx<0||xx>=n||yy<0||yy>=m||grid[xx][yy]!=1)continue;grid[xx][yy]=0;sum--;q.add(new Node(xx,yy,o.t+1));}}if(sum!=0)ans=-1;return ans;}
}

207. 课程表

一句话题意

        给定一些课程的前后学习关系,问是否能全部学习。

一句话题解

          拓扑排序。

class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {List<List<Integer>> to = new ArrayList<>();int[] in = new int[numCourses];for (int i = 0; i < numCourses; i++)to.add(new ArrayList<>());for (int[] a : prerequisites) {to.get(a[1]).add(a[0]);in[a[0]]++;}Queue<Integer> q = new LinkedList<>();for (int i = 0; i < numCourses; i++) {if (in[i] == 0)q.add(i);}while (q.size() > 0) {int x = q.poll();numCourses--;for (Integer y : to.get(x)) {in[y]--;if (in[y] == 0)q.add(y);}}return numCourses == 0;}
}

208. 实现 Trie (前缀树)

一句话题意

请你实现 Trie 类:

  • Trie() 初始化前缀树对象。

  • void insert(String word) 向前缀树中插入字符串 word

  • boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false

  • boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false

一句话题解

        实现一棵26岔树。

class Trie {Trie[] children;boolean isEnd;public Trie() {children = new Trie[26];isEnd = false;}public void insert(String word) {Trie node = this;for(char c: word.toCharArray()){if(node.children[c-'a'] == null){node.children[c-'a'] = new Trie();}node = node.children[c-'a'];}node.isEnd = true;}public boolean search(String word) {Trie node = this.searchPrefix(word);return node!=null&&node.isEnd;}public boolean startsWith(String prefix) {return this.searchPrefix(prefix) != null;}public Trie searchPrefix(String s){Trie node = this;for(Character c:s.toCharArray()){if(node.children[c-'a']==null)return null;node=node.children[c-'a'];}return node;}
}

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

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

相关文章

《社交类应用开发:React Native与Flutter的抉择》

社交类应用以令人目不暇接的速度更新迭代。新功能不断涌现&#xff0c;从更智能的算法推荐到多样化的互动形式&#xff0c;从增强的隐私保护到跨平台的无缝体验&#xff0c;每一次更新都旨在满足用户日益增长且多变的需求。面对如此高频的更新需求&#xff0c;选择合适的跨端框…

关于3D的一些基础知识

什么是2D/3D? 2D&#xff08;二维&#xff09;和3D&#xff08;三维&#xff09;是描述空间维度的概念&#xff0c;它们的核心区别在于空间维度、视觉表现和应用场景。以下是详细对比&#xff1a; 1. 定义与维度 • 2D&#xff08;二维&#xff09; • 定义&#xff1a;仅包…

大连理工大学选修课——机器学习笔记(7):集成学习及随机森林

集成学习及随机森林 集成学习概述 泛化能力的局限 每种学习模型的能力都有其上限 限制于特定结构受限于训练样本的质量和规模 如何再提高泛化能力&#xff1f; 研究新结构扩大训练规模 提升模型的泛化能力 创造性思路 组合多个学习模型 集成学习 集成学习不是特定的…

嵌入式产品运行中数据丢失怎么办?

目录 1、数据丢失现象与根源分析 2、硬件层优化 3、系统/驱动层优化 4、应用软件层优化 5、文件系统选型深度解析 5.1、NAND Flash 适用文件系统 5.2、eMMC 适用文件系统 6、系统挂载选项优化实践 嵌入式系统在运行过程中&#xff0c;尤其是在涉及频繁数据写入&#xf…

第十一节:性能优化高频题-响应式数据深度监听问题

解决方案&#xff1a;watch的deep: true选项或watchEffect自动追踪依赖 Vue响应式数据深度监听与性能优化指南 一、深度监听的核心方案 watch的deep: true模式 • Vue2实现&#xff1a;需显式声明深度监听配置 watch: {obj: {handler(newVal) { /* 处理逻辑 */ },deep: tru…

【Linux实践系列】:进程间通信:万字详解命名管道实现通信

&#x1f525; 本文专栏&#xff1a;Linux Linux实践项目 &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 与其等待完美的风&#xff0c;不如学会在逆风中调整帆的角度——所有伟大航程都始于此刻出发的勇气 ★★★ 本文前置知…

权力结构下的人才价值重构:从 “工具论” 到 “存在论” 的转变​

引言​ 在现在的公司管理里&#xff0c;常常能听到这样一种说法&#xff1a;“我用你&#xff0c;你才是人才&#xff1b;不用你&#xff0c;你啥都不是。” 这其实反映了一种很常见的评判人才价值的标准&#xff0c;就是只看公司的需求&#xff0c;把人才当作实现公司目标的工…

UE实用地编插件Physical Layout Tool

免费插件 https://www.fab.com/zh-cn/listings/a7fb6fcf-596f-48e9-83cc-f584aea316b1 可以通过物理模拟批量放置物体 不用再一个个摆放了 装饰环境从未如此简单&#xff0c;您不必再考虑对齐物体。 物理地放置物体&#xff0c;移动它们&#xff0c;在移动或在地图上放置物体…

Nerfstudio 环境配置与自有数据集(图片和视频)测试全方位全流程实战【2025最新版!!】

一、引言 神经辐射场(Neural Radiance Fields&#xff0c;简称NeRF)是近年来计算机视觉和图形学领域的一项革命性技术&#xff0c;它能够从2D图像中学习复杂的3D场景表示。然而&#xff0c;NeRF技术的实现和应用门槛较高&#xff0c;需要较为专业的计算机视觉和深度学习知识。…

Transformer:颠覆深度学习的架构革命与技术演进

2017年&#xff0c;谷歌团队在论文《Attention Is All You Need》中提出的Transformer架构&#xff0c;彻底改变了人工智能对序列数据的处理范式。它不仅解决了传统循环神经网络&#xff08;RNN&#xff09;的长期依赖和并行化难题&#xff0c;更催生了BERT、GPT等划时代模型&a…

原型模式(Prototype Pattern)详解

文章目录 1. 什么是原型模式&#xff1f;2. 为什么需要原型模式&#xff1f;3. 原型模式的结构4. 原型模式的基本实现4.1 基础示例&#xff1a;简单的原型模式4.2 使用Java的Cloneable接口 5. 深拷贝与浅拷贝5.1 浅拷贝&#xff08;Shallow Copy&#xff09;5.2 深拷贝&#xf…

掉馅饼,八分之一到二分之一:《分析模式》漫谈59

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的第6章“存货和会计”原文&#xff1a; The transactions creation would then be the only place that could create entries. ... Providing only the trans…

使用Python和Pandas实现的Amazon Redshift权限检查与SQL生成用于IT审计

import pandas as pd import psycopg2 from psycopg2 import sql# 连接Redshift conn psycopg2.connect(hostyour-cluster.endpoint.redshift.amazonaws.com,port5439,dbnamedev,useradmin,passwordyour-password )# 权限检查函数 def check_redshift_permissions(conn):"…

Cribl 数据脱敏 更多方法 MASK (三)

我做过好几个cribl 数据脱敏的实验: Cribl 脱敏mask-CSDN博客

Android Studio下载安装教程

## 什么是Android Studio Android Studio是Google官方推出的Android应用开发集成环境(IDE)&#xff0c;基于IntelliJ IDEA开发&#xff0c;专门用于Android应用开发。它包含了代码编辑器、可视化布局编辑器、应用性能分析工具、模拟器等功能&#xff0c;为开发者提供了一站式的…

如何测试登录模块?全面测试思路解析

思路如下: 面试官问"如何测试一个登录模块?"时,考察的是你的测试思维是否全面,能否覆盖功能、安全、性能、兼容性等多个维度。下面我会从不同角度详细展开,确保回答既系统又深入。 1. 功能测试(Functional Testing) 1.1 正常流程测试 ✅ 正确的用户名+密码:…

MySQL基础篇 | 数据库概述及在TencentOS中安装MySQL8.0.42版本

MySQL基础篇 | 在TencentOS中安装MySQL8.0.42版本 1. 数据库概述2. 部署前准备工作2.1. 安装依赖包2.2. GCC版本升级3. MySQL服务部署3.1. 编译部署MySQL3.2. 初始化数据库3.3. 启动数据库4. 数据库配置4.1 配置环境变量4.2. 首次登录设置1. 数据库概述 SQL Server:SQL Server…

Angular教程前言:历史、安装与用途

Angular 是一个强大且流行的开源前端 Web 应用程序框架&#xff0c;由 Google 开发并维护 1。它在现代 Web 开发中占据着重要的地位&#xff0c;尤其在构建动态、高效且可扩展的 Web 应用程序方面表现出色&#xff0c;特别适用于单页应用程序 (SPA) 和复杂的用户界面 1。本教程…

systemd和OpenSSH

1 systemd 1.1 配置文件 /etc/systemd/system /lib/systemd/system /run/systemd/system /usr/lib/systemd/user 1.2 commands systemctl list-unit-files | grep enable systemctl cat dlt-daemon.service systemctl cat dlt-system.service systemctl show dlt-daemon.ser…

如何实现一个可视化的文字编辑器(C语言版)?

一、软件安装 Visual Studio 2022 Visual Studio 2022 是微软提供的强大集成开发环境&#xff08;IDE&#xff09;&#xff0c;广泛用于C/C、C#、Python等多种编程语言的开发。它提供了许多强大的工具&#xff0c;帮助开发者编写、调试和优化代码。 1.下载 Visual Studio 202…