Leetcode —— 886. 可能的二分法
给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。
每个人都可能不喜欢其他人,那么他们不应该属于同一组。
形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。
当可以用这种方法将所有人分进两组时,返回 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/possible-bipartition
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
————————————————
解题思路:这道题类似于节点染色(假设染为红色和蓝色),对于当前节点,假设其颜色为红色,则其邻居颜色都需要被染色为蓝色;接着遍历其邻居节点,因为该邻居节点被染色为蓝色,则该邻居节点的邻居节点的颜色需要被染色为红色;
对于上述情况的不断递归,如果对某一个节点进行染色时,该节点已经被染色,同时其颜色和要被进行染色的颜色不同,则不能进行有效划分;
class Solution(object):def possibleBipartition(self, N, dislikes):graph = collections.defaultdict(list)for u, v in dislikes: # 记录不能作为同一组的各种情况graph[u].append(v)graph[v].append(u)color = {} # 用于保存已经被染色的节点def dfs(node, c = 0): if node in color: # 如果需要被染色的节点已经染色了return color[node] == c # 判断其需要被染色的颜色和其自身颜色是否一样,不一样则不能进行有效划分color[node] = c # 如果该节点没有被进行染色,则对其进行染色return all(dfs(nei, c ^ 1) for nei in graph[node]) # 对当前节点的所有邻居节点进行染色,注意使用异或操作改变需要染色的颜色return all(dfs(node) for node in range(1, N+1) if node not in color) # all()的作用是当所有节点都能正常染色时返回True
Leetcode —— 886. 可能的二分法相关推荐
- LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...
- leetcode 35. 搜索插入位置(二分法搜索失败的情况)
35. 搜索插入位置 思路:二分查找 模板: 如果查找成功,返回target在nums中的下标 //二分查找模板 //nums[0..n-1]为有序数组,target为目标 int left=0; i ...
- LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)
文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一 ...
- LeetCode 685. 冗余连接 II(并查集)
1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...
- LeetCode 684. 冗余连接(并查集)
1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...
- LeetCode中的那些题
目录 1. 两数之和 2. 两数相加 3. 无重复字符的最长子串 *******4.寻找两个有序数组的中位数(官方解答) : 5.最长回文子串(官方解答) 15. 三数之和 16. 最接近的三数之和 ...
- leetcode 转载
转载: https://blog.csdn.net/love905661433/article/details/84980135 LeetCode 1- 100 1. 两数之和 : https://b ...
- C#LeetCode刷题-深度优先搜索
深度优先搜索篇 # 题名 刷题 通过率 难度 98 验证二叉搜索树 22.2% 中等 99 恢复二叉搜索树 45.1% 困难 100 相同的树 48.1% 简单 101 对称二叉树 42.1% 简单 ...
- 【二分法】剑指offer:二维数组中的查找
对于二维数组中每一个一维数组,用二分查找,判断能否找到该数 leetcode专题笔记:二分法查找(1)(附leetcode题)_m0_52043808的博客-CSDN博客 代码: class Solu ...
最新文章
- linux安装qt_采用STM32MP1的PanGu Board开发板运行Qt应用
- flutter中state详解
- Vim取消查找后的高亮提示,:nohl或者:noh什么的都不管用,来一个简单粗暴方法
- python itertool_函数式编程的Python实践(2):Itertool
- C#(Sharp)操作数据库原理及案例精析(强烈建议收藏)
- Scrapy 1.4 文档 01 初窥 Scrapy
- 隧道凿岩机器人_隧道凿岩机器人的研制
- PC_excel完毕一列英文小写变大写
- w25q64 linux,W25Q64Flash芯片STM32操作
- 原生js实现分页效果(带实例)
- Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
- 《暮色4:破晓(上)》暮光之城 高清蓝光BD 1080P 720P下载,附中英双字字幕!...
- win10下载CAD之后任务栏卡死
- spark标签计算及用户画像应用
- PCB通孔类焊盘封装
- 整理了 47 个 Python 人工智能库
- MapReduce Inverted Index
- matlab限幅器无饱和怎么设置,抗积分饱和算法:输出限幅.ppt
- 关键词搜图、截图小助手——有了它妈妈再也不用担心我数据集啦
- python反爬虫原理与绕过实战pdf-antispider
热门文章
- Diskpart 磁盘管理实战演示
- 无线网络MIMO技术浅谈
- 面试精讲之面试考点及大厂真题 - 分布式专栏 10 Redis雪崩,穿透,击穿三连问
- 使用PostgREST的RestAPI操作之 类型转JSON对象 | 嵌入视图
- 容器编排技术 -- Kubernetes JSONpath Support
- 创建设计模式 - 工厂设计模式
- WPF 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改
- java Set无序集合 HashSet 的对象元素唯一性
- 【Day01】你有封装过 axios 吗?主要是封装哪些方面?如何中断 axios 请求?
- markdown编辑器基础语法总结