微软面试题:可能的二分法
描述
给定一组 N 人(编号为 1, 2, …, N), 我们想把每个人分进任意大小的两组。
每个人都可能不喜欢其他人,那么他们不应该属于同一组。
形式上,如果 dislikes[i] = [a, b],表示不允许将编号为 a 和 b 的人归入同一组。
当可以用这种方法将每个人分进两组时,返回 true;否则返回 false。
1 <= N <= 2000
0 <= dislikes.length <= 10000
1 <= dislikes[i][j] <= N
dislikes[i][0] < dislikes[i][1]
对于 dislikes[i] == dislikes[j] 不存在 i != j
在线评测地址
样例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
解题思路
先根据不喜欢的关系,建立一个无向图。对每个节点进行遍历,若该节点尚未被放置,则默认放入第一类中,然后搜索该节点的相邻节点,把所有未被放入的相邻节点放入另一类中,并对这些节点进

这篇博客介绍了微软经典面试题——可能的二分法,即如何在考虑人员相互不喜欢的情况下,将所有人分成两组。题目描述了输入参数和限制条件,并提供了解题思路,通过构建无向图,采用深度优先搜索(DFS)策略来检查是否能成功分组,避免冲突。源代码并未在摘要中给出,但提到了可以参考更多题解。
最低0.47元/天 解锁文章
1173

被折叠的 条评论
为什么被折叠?



