【发布时间】:2019-01-24 23:56:20
【问题描述】:
我正在解决以下问题:
在一个有人的房间里,我们将定义两个人是朋友,如果他们 是直接或间接的朋友。如果 A 是 B 的朋友,而 B 是 是 C 的朋友,那么 A 也是 C 的朋友。一群朋友是一个 一组人,其中任何两个人都是朋友。给定 直接是朋友的人的列表,找到最小的组 朋友..
示例: 输入:
1<->6
2<->7
3<->8
4<->9
2<->6
3<->5
组:
1-6-2-7
3-8-5
4-9
最小组的人数是 2,即 4-9,所以我们应该返回 2。
我想出了下面的代码,但我现在不明白如何使用这个holder 映射来获得所需的输出。我在这里有点困惑。解决此问题的最佳方法是什么?
private static int findGroups(final List<List<Integer>> inputs) {
if (inputs == null || inputs.isEmpty()) {
return 0;
}
int count = Integer.MAX_VALUE;
Map<Integer, List<Integer>> holder = new HashMap<>();
for (List<Integer> input : inputs) {
// storing it in bidirectional way in the map
List<Integer> l =
holder.containsKey(input.get(0)) ? holder.get(input.get(0)) : new ArrayList<Integer>();
l.add(input.get(1));
holder.put(input.get(0), l);
List<Integer> l1 =
holder.containsKey(input.get(1)) ? holder.get(input.get(1)) : new ArrayList<Integer>();
l1.add(input.get(0));
holder.put(input.get(1), l1);
}
System.out.println(holder);
// use holder map to get the smaller group here?
return count;
}
看来我需要在这里使用递归来获得更小的组?
【问题讨论】:
-
解决这个问题最好用图数据结构
-
间接友谊有限制吗?如果 A B、B C 和 C D 是 A 和 D 的朋友还是停在 A 是 C 的朋友?
-
您可以创建图结构和搜索组件。
标签: java algorithm data-structures hashmap