[Leetcode][第785题][JAVA][判断二分图][BFS][DFS]
【问题描述】[中等]
【解答思路】
1. DFS 深度优先遍历
时间复杂度:O(N+M) 空间复杂度:O(N)
class Solution {private static final int UNCOLORED = 0;private static final int RED = 1;private static final int GREEN = 2;private int[] color;private boolean valid;public boolean isBipartite(int[][] graph) {int n = graph.length;valid = true;color = new int[n];Arrays.fill(color, UNCOLORED);for (int i = 0; i < n && valid; ++i) {if (color[i] == UNCOLORED) {dfs(i, RED, graph);}}return valid;}public void dfs(int node, int c, int[][] graph) {color[node] = c;int cNei = c == RED ? GREEN : RED;for (int neighbor : graph[node]) {if (color[neighbor] == UNCOLORED) {dfs(neighbor, cNei, graph);if (!valid) {return;}} else if (color[neighbor] != cNei) {valid = false;return;}}}
}
2. 广度优先遍历 BFS
时间复杂度:O(N+M) 空间复杂度:O(N)
class Solution {private static final int UNCOLORED = 0;private static final int RED = 1;private static final int GREEN = 2;private int[] color;public boolean isBipartite(int[][] graph) {int n = graph.length;color = new int[n];Arrays.fill(color, UNCOLORED);for (int i = 0; i < n; ++i) {if (color[i] == UNCOLORED) {Queue<Integer> queue = new LinkedList<Integer>();queue.offer(i);color[i] = RED;while (!queue.isEmpty()) {int node = queue.poll();int cNei = color[node] == RED ? GREEN : RED;for (int neighbor : graph[node]) {if (color[neighbor] == UNCOLORED) {queue.offer(neighbor);color[neighbor] = cNei;} else if (color[neighbor] != cNei) {return false;}}}}}return true;}
}
【总结】
1. 深度优先遍历 栈/递归 广度优先遍历 队列
2有向图、无向图 、树 ----> BFS DFS思想
转载链接:https://leetcode-cn.com/problems/is-graph-bipartite/solution/pan-duan-er-fen-tu-by-leetcode-solution/
[Leetcode][第785题][JAVA][判断二分图][BFS][DFS]相关推荐
- [Leetcode][第733题][JAVA][图像渲染][BFS][DFS]
[问题描述][简单] [解答思路] 千万不要想复杂了 不是三维空间 是一维空间 ! 本题要求将给定的二维数组中指定的「色块」染成另一种颜色.「色块」的定义是:直接或间接相邻的同色方格构成的整体. 可以 ...
- [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
[问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...
- [Leetcode][第404题][JAVA][左叶子之和][DFS][BFS]
[问题描述][简单] [解答思路] 1. DFS 递进思想 一步一步递进 /先序遍历求所有节点值之和 public int sumOfTrees(TreeNode root) {if (root == ...
- [Leetcode][第97题][JAVA][交错字符串][BFS][动态规划]
[问题描述][中等] [解答思路] 1. 动态规划 第 1 步:设计状态 f(i,j) 表示 s 1的前 i个元素和 s2 的前 j个元素是否能交错组成 s3的前 i + j 个元素 第 2 步:状态 ...
- [Leetcode][第207题][JAVA][课程表][拓扑排序][DFS]
[问题描述][中等] [解答思路] 1. 拓扑排序 复杂度分析 HashSet[] 数组 import java.util.HashSet; import java.util.LinkedList; ...
- [Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]
[问题描述][中等] [解答思路] 当 xx 号房间中有 yy 号房间的钥匙时,我们就可以从 xx 号房间去往 yy 号房间.如果我们将这 nn 个房间看成有向图中的 nn 个节点,那么上述关系就可以 ...
- [Leetcode][第392题][JAVA][判断子序列][动态规划][双指针]
[问题描述][简单] [解答思路] 1. 双指针 时间复杂度:O(N+M) 空间复杂度:O(1) class Solution {public:bool isSubsequence(string s, ...
- [Leetcode][第78题][JAVA][子集][位运算][回溯]
[问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...
- [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]
[问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...
最新文章
- c++基础day03
- mysql setinc_数据库自增自减——setInc、setDec
- Linux Shell编程之脚本执行方式
- Flutter 中的国际化之多语言环境
- React中使用Vditor详解(自定义图片)
- 代码主题darcula_Pycharm最舒服的主题风格
- POJ-1163(DP,Water)
- 主流的web前端开发及调试工具
- MongoDB for MAC 下载及安装
- 曲率、曲率(对弧长)的导数以及曲率导数(对弧长)的导数的计算
- rust键位失灵_switch手柄按键失灵不响应怎么办 NS手柄按键没反应解决办法
- safari浏览网页打开速度很慢如何解决
- JVM--查看堆栈信息
- 1069 微博转发抽奖
- 半导体衰落超出想象,会熊市反弹? – 25 年来 71 家公司的库存分析
- BERT 的 PyTorch 实现(超详细)
- 写给准备秋招的学弟学妹们
- 【趣味数学】快速判断一个数是否是另一个数的倍数
- 安装Markdownpad2后出现的错误(This view has crashed)解决
- 局域网视频点播系统 IPTV系统方案