我在Codility网站上尝试了示例演示,并发布了我的解决方案,但我有一个简单的错误,但无法确定。
这里描述的问题(仅描述问题,请不要关心那里的分析,因为那不是我的解决方案)
http://codility.com/cert/view/certHNPV9B-7M4GAQR985B54VYF/details
我的解决方案在这里:
public static int min_router_peripherality ( int[] T ) {
// write your code here
int sum=0;
for(int i=0;i<T.length;i++) sum+= T[i];
int min = sum;
int index = 0;
int array [] = new int [T.length];
for(int i=0;i<T.length;i++) {
min = sum -T[i];
array[i] = min;
}
int x = array[0];
for (int i=0; i<array.length;i++)
{
if (array[i]<x)
{
x = array[i];
index = i;
}
}
return index;
}
答案 0 :(得分:0)
在查看结果时,我会说您的程序是正确的,但是成功完成所有测试用例的速度太慢。所以你需要提出更好的算法。
编辑:正如Ivan Benko Ivan Benko所说,你的解决方案是O(N),所以我看了你的代码,我想出了以下输入:
{ 4, 9, 4, 9, 4, 4, 8, 9, 0, 0 }
虽然它不是示例输入,但它确实描述了与任务描述中相同的网络。所以输出应该是相同的,但你的解决方案给出了不同的答案。
答案 1 :(得分:0)
我所做的就是查看你的代码,我注意到的第一件事就是你看起来根本不需要array
数组,或者第三个for
循环。第二个for
循环可以跟踪它生成的最低min
值,以及与最低min
值关联的索引,而不是存储所有值和制作像你现在正在做的第二次奔跑。
修改强> 和其他人一样,我认为你的链接是你自己的结果。我不会发布答案,因为我认为你应该自己想出答案。然而,在我看来,他们感到困惑,他们说“找到所有其他节点的距离总和”,这可能就是你开始总结整个阵列的原因。他们传递给你的函数的数组无论如何都不是一组距离。这是现有连接的列表。如果数组中的第一个元素(0索引处的那个元素)是5,那么这意味着路由器0与路由器5有连接。因此,我认为你接近它是错误的。
答案 2 :(得分:0)
我认为错误如下:
for(int i=0;i<T.length;i++)
sum+= T[i];
在这里,您可以像对待一些重量一样对待T[i]
。但Node-Ids不是权重。总结节点ID是没用的。
然后:文字说:“如果T [P] = Q且P≠Q,......”。我没有看到任何考虑到这一点的东西。
然后:不理解算法我尝试了这样一个简单的“线”:
int[] T = {1, 2, 3, 4, 5, 6, 7, 8, 9, 9};
结果是8
。但在一条线上,结果应该在中间位置。
因此,我怀疑链接的页面会显示您发布的代码的结果。
答案 3 :(得分:0)
两个相邻节点有一条边,其权重为1.