【问题标题】:Partition an integer array into 2 unconnected parts将整数数组划分为 2 个未连接的部分
【发布时间】:2017-05-11 13:03:51
【问题描述】:

给定一个长度为nm 的数组元素之间的连接的int 数组(每个元素的值都等于它的索引)。将数组划分为 2 部分(部分中的所有元素都必须相对于给定的m 连接未连接)。

如果存在这样的分区,则输出true,否则输出false

这里有 3 个例子:

  1. 给定数组:{0, 1, 2, 3}

    给定连接:0-12-3(0 连接到 1,2 连接到 3)

    输出应为:true(分区为{0,3}{1,2}

  2. 给定数组:{0, 1, 2}

    给定连接:1-20-10-2

    输出应该是:false(没有 2 个分区只包含未连接的元素)

  3. 给定数组:{0,1}

    给定连接:0-1

    输出应该是:true(分区是{0}{1}

我目前的方法:在数组元素之间形成所有可能的连接并存储它们,从我存储的连接中删除 m 传入连接,检查剩余连接是否形成给定数组的 2 个分区。这个解决方案太慢了(我怀疑建立所有可能的连接需要太多时间)。

【问题讨论】:

标签: java algorithm graph-algorithm


【解决方案1】:

问题是测试给定的图是否为bipartite,即2-colorable,这可以通过使用depth-first search来高效完成。从任意节点开始,为其分配两种颜色中的任何一种。对于迭代的每条边,为目标节点赋予与其父节点不同的颜色。如果这不可能,则终止搜索,因为输入不是二分的。否则,您已经生成了表示两个分区的 2 色图。

【讨论】:

  • 我试图弄清楚为什么你认为你的答案确实有效,然后我意识到我完全误读了这个问题。
猜你喜欢
  • 1970-01-01
  • 2013-10-20
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 2013-05-04
相关资源
最近更新 更多