我正在尝试完成一项提示,其提示如下:
这是2059年。你今年5月有空闲时间,想参观一个有趣的星系。在旅途中你需要一些机器,你想知道它们中有多少可以拿走。 商店里有很多机器。每台机器可能需要一些其他机器才能正常工作,并且您希望所有机器都能正常工作。幸运的是,在2053年,我们引入了一项特殊规则,让客户的生活更轻松。规则说如果机器A依赖于另一台机器B,那么机器B也依赖于机器A.
您想要购买K台不同的机器,以便所有机器都能正常工作。您将获得一个描述机器之间依赖关系的String []依赖项。依赖关系的元素i是机器i依赖的空间分隔的机器列表。以升序返回包含K的所有可能正值的int []。
示例:
{“1 2”,“0”,“0”,“”}
机器0需要机器1和2才能工作 机器1需要机器0才能工作 机器2需要机器0才能工作 机器3不需要任何其他机器工作
允许的K值为1(您只需要机器3),3(您需要机器0,1,2)和4(您可以使用所有机器)。所以你应该回来 {1,3,4}
我到目前为止的代码没有通过任何测试用例,但我无法理解为什么。
public class GalaxyTrip {
Set<String> myVisited= new TreeSet<String>();
TreeMap<String, List<String>> myGraph = new TreeMap<String, List<String>>();
public int[] possibleValues(String[] dependencies) {
int vertex = 0;
for(String s : dependencies)
{
String sv = "" + vertex;
vertex++;
List<String> list = new ArrayList<String>();
if (s.equals("")) continue; // no vertices, don't parse
String[] a = s.split(" ");
for (String nextv : a)
{
list.add(nextv);
}
myGraph.put(sv, list);
}
ArrayList<Integer> myAnswers= new ArrayList<Integer>();
for(String thing:myGraph.keySet()){
int answer=dfs(thing);
myAnswers.add(answer);
}
int[] intArray = new int[myAnswers.size()];
for (int i = 0; i < myAnswers.size(); i++) {
intArray[i] = myAnswers.get(i);
}
Arrays.sort(intArray);
return intArray;
}
private int dfs(String vertex){
if(myVisited.contains(vertex)){
return 0;
}
myVisited.add(vertex);
int total=1;
for(String adj:myGraph.get(vertex)){
total+=dfs(adj);
}
return total;
}
答案 0 :(得分:-1)
在返回的集合中值为0是否可以接受?查看代码,对于大小为n的图形,无论其配置如何,我都希望intArray的大小为n。此外,如果你有一个5号组件和4号组件,我希望根据你的解决方案看到以下结果:
{0,0,0,0,0,0,0,0,0,0,4,4,5}
请注意,您缺少值8,9和13,因为您从不将任何结果添加到一起。在我看来,你正确处理dfs并跟踪你是否看到了一个顶点。似乎缺少的是在答案中处理重复的结果(在这种情况下有很多0,有4个用于4),以及计算所有可能的求和子集的缺失步骤。
提示:使用Set存储myAnswers而不是List,并抛出任何值为0的答案。然后,处理添加过程。