岛屿数量(200)

class Solution {

    public int numIslands(char[][] grid) {

        int res = 0;
int m = grid.length;
int n = grid[0].length; for (int i = 0; i < m ; i++){
for (int j = 0; j < n; j++){
if (grid[i][j] == '1'){
res+=1;
markLand(grid, i, j);
} }
}
return res;
} private void markLand(char[][] grid, int i, int j){
if (i < 0 || i > grid.length-1 || j < 0 || j > grid[0].length-1 || grid[i][j] == '0'){
return ;
}
grid[i][j] = '0'; markLand(grid, i+1, j);
markLand(grid, i-1, j);
markLand(grid, i, j+1);
markLand(grid, i, j-1);
}
}
  • 分析

简单的四向寻找

腐烂的橘子(994)

class Solution {
private static final int[][] DIRECTIONS = {{1,0}, {-1,0}, {0,1}, {0,-1}};
public int orangesRotting(int[][] grid) {
int res = 0;
int fresh = 0;
int m = grid.length;
int n = grid[0].length;
Deque<int []> rotArray = new ArrayDeque<>(); for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
if (grid[i][j] == 1) fresh++;
else if (grid[i][j] == 2) rotArray.addFirst(new int[] {i, j});
}
} while (fresh > 0 && !rotArray.isEmpty()){
res+=1;
int len = rotArray.size();
for (int i = 0; i < len; i++){
int[] temp = rotArray.removeLast();
for (int[] dir : DIRECTIONS){
int row = temp[0] + dir[0];
int col = temp[1] + dir[1]; if (0 <= row && row < m && 0 <= col && col < n
&& grid[row][col] == 1){
fresh--;
grid[row][col] = 2;
rotArray.addFirst(new int[] {row, col});
}
}
}
} return fresh>0 ? -1 : res;
}
}
  • 分析

相比于普通的四向寻找, 难点在于轮次, 可以类比于二叉树的层序遍历, 一层一层扩展

课程表(207)

class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
List<Integer>[] line = new ArrayList[numCourses];
Arrays.setAll(line, i -> new ArrayList<>());
for (int[] p : prerequisites){
line[p[1]].add(p[0]);
} int[] colors = new int[numCourses];
for (int i = 0; i < numCourses; i++){
if (colors[i] == 0 && dfs(i, colors, line)) return false;
} return true; } private boolean dfs(int i, int[] colors, List<Integer>[] line){
colors[i] = 1;
for (int j : line[i]){
if (colors[j] == 1 || colors[j] == 0 && dfs(j, colors, line)){
return true;
}
}
colors[i] = 2;
return false;
}
}
  • 分析

判断图中是否有环

利用三色标记法 {0, 1, 2} →{未达, 正在使用, 可达}

实现Tire(208)

代码太长了就不放了

 private static class Node {
Node[] son = new Node[26];
boolean end;
} private final Node root;
  • 分析

insert() 部分 实际上是开辟道路 if (curr.son[c] == null) curr.son[c] = new Node();

search() 和 startsWith() 实际上都是一路沿son下移, 遇到没开辟完的路线 return false

如果移动结束了, 如果当前节点的end == true 则为完整单词 , 否则为前缀

hot100之图论的更多相关文章

  1. [leetcode] 题型整理之图论

    图论的常见题目有两类,一类是求两点间最短距离,另一类是拓扑排序,两种写起来都很烦. 求最短路径: 127. Word Ladder Given two words (beginWord and end ...

  2. 并查集(图论) LA 3644 X-Plosives

    题目传送门 题意:训练指南P191 分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个 ...

  3. NOIp 2014 #2 联合权值 Label:图论 !!!未AC

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...

  4. HDU 5521 [图论][最短路][建图灵感]

    /* 思前想后 还是决定坚持写博客吧... 题意: n个点,m个集合.每个集合里边的点是联通的且任意两点之间有一条dis[i]的边(每个集合一个dis[i]) 求同时从第1个点和第n个点出发的两个人相 ...

  5. SDUT 2141 【TEST】数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

    数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem ...

  6. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  7. HDU 5934 Bomb 【图论缩点】(2016年中国大学生程序设计竞赛(杭州))

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. Codeforces 553C Love Triangles(图论)

    Solution: 比较好的图论的题. 要做这一题,首先要分析love关系和hate关系中,love关系具有传递性.更关键的一点,hate关系是不能成奇环的. 看到没有奇环很自然想到二分图的特性. 那 ...

  9. 图论(floyd算法):NOI2007 社交网络

    [NOI2007] 社交网络 ★★   输入文件:network1.in   输出文件:network1.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 在社交网络( ...

  10. 【图论】【宽搜】【染色】NCPC 2014 A Ades

    题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1787 题目大意: N个点M条无向边(N,M<=200000),一个节点只能有一个 ...

随机推荐

  1. Windows下安装使用OpenLDAP

    LDAP:(轻量级目录访问协议,Lightweight Directory Access Protocol)它是基于 X.500标准的,但是简单多了并且可以根据需要定制.与X.500不同,LDAP支持 ...

  2. Oracle 内存(SGA,PGA)详细介绍

    一.名词解释(1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区.(2)共享 ...

  3. nacos(九):sentinel——规则持久化

    接上回,sentinel基本使用我们已经掌握.但是在设置限流规则时,会发现规则都是临时的,一段时间没访问资源或者重启sentinel,规则就会消失.所以,我们需要有一个将规则持久化保存的地方,让规则一 ...

  4. ISODate时间转换

    private function formatISODate($dateTime) { $date = date("Y-m-d", strtotime($dateTime)); $ ...

  5. php代码审计实战-开源项目Materialized CMS漏洞检测

    一.下载Materialized CMS 链接地址:https://sourceforge.net/projects/materialized-cms/files/latest/download 二. ...

  6. Chrome谷歌浏览器常用快捷键、开发技巧

    谷歌浏览器作为常用的开发工具,熟悉常用的快捷键,不仅方便快捷,也能间接提高不少工作效率.以下是谷歌浏览器常用快捷键和开发技巧. 标签页和窗口快捷键 1. Ctrl + n 打开新窗口 2. Ctrl ...

  7. java 实现发送邮件功能

    最近工作项目中需要使用到邮件功能,参考网上的文章,实现了一个基于java的邮件发送功能:直接上代码: 1.依赖 <dependency> <groupId>org.spring ...

  8. java泛型简单入门

    泛型 泛型 泛指某一种类型 ( 必须是 引用类型 ) 明确时机: 1.有时候 创建对象的时候, 明确泛型 2.有时候 调用一个方法时, 明确泛型 3.有时候 创建一个类型,然后实现一个接口的时候 明确 ...

  9. PHP 实现微信异步回调数据打印知识分享

    一.引言 在微信支付.微信公众号消息推送等场景中,微信服务器会通过异步回调的方式将处理结果发送给我们的服务器.为了便于调试和监控,我们需要获取并打印这些回调数据.本文将详细介绍如何使用 PHP 的 f ...

  10. 【漏洞扫描】Nuclei v3.4.1 下载方法(附快速下载链接)

    简介 Nuclei v3.4.1是一款强大的漏洞扫描器,并且拥有社区维护的海量漏洞POC,工具质量十分的高.Nuclei 用于基于模板跨目标发送请求,从而实现零误报并提供对大量主机的快速扫描.Nucl ...