力扣|Q886可能的二分法PossibleBipartition

Q886PossibleBipartition

题目简介

给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。

给定整数 n 和数组 dislikes ,其中 dislikes[i] = [ai, bi] ,表示不允许将编号为 aibi 的人归入同一组。当可以用这种方法将所有人分进两组时,返回 true ;否则返回 false

示例 1:

输入:n = 4, dislikes = [ [1,2],[1,3],[2,4] ]
输出:true
解释:group1 [ 1,4 ], group2 [ 2,3 ]

示例 2:

输入:n = 3, dislikes = [ [1,2],[1,3],[2,3] ]
输出:false

示例 3:

输入:n = 5, dislikes = [ [1,2],[2,3],[3,4],[4,5],[1,5] ]
输出:false

https://leetcode.cn/problems/possible-bipartition

解题思路

着色法,假设第一组的人是红色,第二组的人是蓝色,有以下推论,一个人是红色的,那他不喜欢的人就都是蓝色的,即所有不喜欢红色的人都是蓝色的,所有不喜欢蓝色的人都是红色的。
如果在着色的过程中有冲突那就是false,没有冲突,所有人着色完毕,那就是true。
从任一个人开始,先给他着红色,然后把他所有不喜欢的人着蓝色,在把不喜欢人的不喜欢的人再着红色,即深度优先遍历,每次着色前判断是否已经着色和所着颜色是否正确即可。

代码

public class Q886PossibleBipartition {

    ArrayList[] adjList;
    Map colorMap;

    public boolean possibleBipartition(int n, int[][] dislikes) {
        adjList = new ArrayList[n + 1];
        for (int i = 0; i ();     //初始化邻接表
        }
        for (int[] dislike : dislikes) {
            adjList[dislike[0]].add(dislike[1]);        //填充邻接表
            adjList[dislike[1]].add(dislike[0]);
        }

        colorMap = new HashMap<>();
        for (int i = 1; i

测试

public class Q886PossibleBipartitionTest {

    public Q886PossibleBipartition q = new Q886PossibleBipartition();

    @Test
    public void test1() {
        assertTrue(q.possibleBipartition(4, new int[][]{{1,2},{1,3},{2,4}}));
    }

    @Test
    public void test2() {
        assertFalse(q.possibleBipartition(3, new int[][]{{1,2}, {1,3},{2,3}}));
    }

    @Test
    public void test3() {
        assertFalse(q.possibleBipartition(5, new int[][]{{1,2},{2,3},{3,4},{4,5},{1,5}}));
    }
}

提交结果

力扣|Q886可能的二分法PossibleBipartition

Original: https://www.cnblogs.com/mrystar/p/16584025.html
Author: Mr耀
Title: 力扣|Q886可能的二分法PossibleBipartition

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586249/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Scalable IO in Java

    https://github.com/gotodsp/Scalable-IO Original: https://www.cnblogs.com/gotodsp/p/1428903…

    Java 2023年5月29日
    068
  • 访问Github速度很慢以及解决方法(系统通用)

    原因分析1,CDN,Content Distribute Network,可以直译成内容分发网络,CDN解决的是如何将数据快速可靠从源站传递到用户的问题。用户获取数据时,不需要直接…

    Java 2023年6月14日
    074
  • Java 将json中key值中带有下划线的部分转为驼峰格式

    Java将json中key值中带有下划线的部分转为驼峰格式 背景说明 在开发过程中,有时会遇到第三个厂商提供的接口返回结果不是严格按照驼峰命名,需要将其中带有下划线的字段进行格式化…

    Java 2023年5月29日
    079
  • 幻灯片:Why Java Sucks and C# Rocks

    昨天在5173与博客园联合举办的技术交流活动中进行了演讲,现在幻灯片终于可以放出了。当然,光看幻灯片本身的效果不大,在演讲过程中我进行了非常多的代码演示和说明,幻灯片本身只能算是一…

    Java 2023年5月29日
    074
  • 二十、反射(完结)

    二十、反射 20.1 类的加载 20.1.1 类的加载概述 程序运行后,某个类在第一次使用时,会将该类的 class 文件读取到内存,并将此类的所有信息存储到一个 Class 对象…

    Java 2023年6月5日
    084
  • [Java]《On Java》阅读记录之 — 可变参数重载问题

    有下面一段代码: public class OverloadingVarargs2 { static void f(float i , Character… args) { S…

    Java 2023年6月5日
    066
  • element-ui 提示框 确认按钮在左 取消按钮在右

    添加 //&#x53D6;&#x6D88;&#x6309;&#x94AE; &#x6837;&#x5F0F; cancelButto…

    Java 2023年6月9日
    062
  • 反射、注解、动态代理的理解

    反射 反射的核心就是拿到了.java编译后的.class文件。通过一系列的API,可以拿到该类中的成员:构造器、属性、方法等。 注解 注解,可以告诉编译器或者JVM做一些事情。比如…

    Java 2023年6月15日
    057
  • Servlet中使用注解@WebServlet进行url匹配报404的问题

    首先这个问题是比较简单,前提是你使用了@WebServlet注解,然后检查了所有配置都没有问题 最终还是前端浏览器报404错误,那多半都是你看一下web.xml配置文件里 meta…

    Java 2023年6月6日
    095
  • 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第4版)

    发布第4版了,速度过来围观,这次版本更新如下: 1、新增查看数据库中所有表的对话框,在精确匹配文本框旁点击更多按钮或双击精确匹配文本框,即可弹出选择数据库表的对话框,这里将列出数据…

    Java 2023年6月9日
    063
  • SpringCloud-Eureka

    1. Eureka简介 Eureka是在Java语言上,基于Restful Api开发的服务注册与发现组件,Springcloud Netflix中的重要组件。 注册中心可以说是微…

    Java 2023年6月7日
    094
  • Pycharm k火秘诀插件

    Pycharm2020最新永久激活码插件(支持Windows),100%永久激活 用到pycharm工具发现没用多久时间又过期了,在网上有看到很多朋友都遇到同样的情况,于是找到了一…

    Java 2023年6月9日
    0151
  • quartz框架(六)-ThreadPool

    本篇博文,博主将介绍Quartz框架中ThreadPool线程池相关的内容。线程池顾名思义,就是一个可以帮助我们来进行线程资源管理的对象。在web开发中,常见的就有数据库连接池,h…

    Java 2023年6月7日
    074
  • 5. SpringBoot框架华夏ERP源码审计

    环境搭建 华夏ERP基于SpringBoot框架和SaaS模式,可以算作是国内人气较高的一款ERP项目,看网上已经公开了漏洞,本次对此框架代码进行源码审计。 直接拖入IDEA加载,…

    Java 2023年5月29日
    064
  • JUC部分并发类使用方式

    下面介绍的是JUC包下一些线程安全类的一些简单使用和一些小demo。 信号量,即可以同时使用的线程数,tryrequire就是将信号量减一,release就是信号量+1,当等于0就…

    Java 2023年6月16日
    060
  • TCP入门简单例子

    TCP的简单例子 TCP最简单聊天室 客户端 连接服务器 Socket 发送消息 package TCP; import java.io.IOException; import j…

    Java 2023年6月6日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球