【问题描述】[中等]

【解答思路】

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]相关推荐

  1. [Leetcode][第733题][JAVA][图像渲染][BFS][DFS]

    [问题描述][简单] [解答思路] 千万不要想复杂了 不是三维空间 是一维空间 ! 本题要求将给定的二维数组中指定的「色块」染成另一种颜色.「色块」的定义是:直接或间接相邻的同色方格构成的整体. 可以 ...

  2. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]

    [问题描述][中等] [解答思路] 1. 回溯 import java.util.ArrayDeque; import java.util.ArrayList; import java.util.De ...

  3. [Leetcode][第404题][JAVA][左叶子之和][DFS][BFS]

    [问题描述][简单] [解答思路] 1. DFS 递进思想 一步一步递进 /先序遍历求所有节点值之和 public int sumOfTrees(TreeNode root) {if (root == ...

  4. [Leetcode][第97题][JAVA][交错字符串][BFS][动态规划]

    [问题描述][中等] [解答思路] 1. 动态规划 第 1 步:设计状态 f(i,j) 表示 s 1的前 i个元素和 s2 的前 j个元素是否能交错组成 s3的前 i + j 个元素 第 2 步:状态 ...

  5. [Leetcode][第207题][JAVA][课程表][拓扑排序][DFS]

    [问题描述][中等] [解答思路] 1. 拓扑排序 复杂度分析 HashSet[] 数组 import java.util.HashSet; import java.util.LinkedList; ...

  6. [Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]

    [问题描述][中等] [解答思路] 当 xx 号房间中有 yy 号房间的钥匙时,我们就可以从 xx 号房间去往 yy 号房间.如果我们将这 nn 个房间看成有向图中的 nn 个节点,那么上述关系就可以 ...

  7. [Leetcode][第392题][JAVA][判断子序列][动态规划][双指针]

    [问题描述][简单] [解答思路] 1. 双指针 时间复杂度:O(N+M) 空间复杂度:O(1) class Solution {public:bool isSubsequence(string s, ...

  8. [Leetcode][第78题][JAVA][子集][位运算][回溯]

    [问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...

  9. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]

    [问题描述][中等] [解答思路] 1. DFS繁琐版本 class Solution {public boolean exist(char[][] board, String word) {bool ...

最新文章

  1. c++基础day03
  2. mysql setinc_数据库自增自减——setInc、setDec
  3. Linux Shell编程之脚本执行方式
  4. Flutter 中的国际化之多语言环境
  5. React中使用Vditor详解(自定义图片)
  6. 代码主题darcula_Pycharm最舒服的主题风格
  7. POJ-1163(DP,Water)
  8. 主流的web前端开发及调试工具
  9. MongoDB for MAC 下载及安装
  10. 曲率、曲率(对弧长)的导数以及曲率导数(对弧长)的导数的计算
  11. rust键位失灵_switch手柄按键失灵不响应怎么办 NS手柄按键没反应解决办法
  12. safari浏览网页打开速度很慢如何解决
  13. JVM--查看堆栈信息
  14. 1069 微博转发抽奖
  15. 半导体衰落超出想象,会熊市反弹? – 25 年来 71 家公司的库存分析
  16. BERT 的 PyTorch 实现(超详细)
  17. 写给准备秋招的学弟学妹们
  18. 【趣味数学】快速判断一个数是否是另一个数的倍数
  19. 安装Markdownpad2后出现的错误(This view has crashed)解决
  20. 局域网视频点播系统 IPTV系统方案

热门文章

  1. Docker有什么好处?
  2. ddl dml dcl
  3. Discuz! 防御CC攻击的设置办法
  4. 状压动规_(POJ2817)
  5. 并发编程之多线程线程安全(下)
  6. windows安装nvm
  7. ELK套件FileBeat部署
  8. java调用dubbo服务器_dubbo源码分析-服务端注册流程-笔记
  9. spring入门笔记
  10. spring注解 @Scheduled(cron = 0 0 1 * * *)的使用来实现定时的执行任务