2011-10-31 56 views
-2

我试过在Codility网站的示例演示,并张贴我的灵魂,但我有一个简单的错误,但无法确定它。试图解决Codalility算法

的问题在这里描述(该问题仅说明请不要在意分析那里,这不是不是我的解决方案)

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

我删除了显然不正确的C++标记。 –

+0

解决方案的时间复杂度为O(N),但是您有超时错误。你确定你提交这个解决方案吗? –

回答

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。但是,结果应该在中间的某个地方。

因此,我怀疑链接的页面显示您发布的代码的结果。

+0

你是对的。我编辑了这个问题。我刚刚发布了问题描述链接,但由于与上述代码相关,因此人们在此考虑分析。 –

0

当看结果时,我会说你的程序是正确的,但是太慢了,无法成功完成所有的测试用例。所以你需要提出更好的算法。

编辑:由于伊凡缤果伊万·本克指出,您的解决方案是O(N),所以我看着你的代码,我想出了一个下面输入:

{ 4, 9, 4, 9, 4, 4, 8, 9, 0, 0 } 

虽然它不是输入示例它确实描述了与任务描述中相同的网络。所以输出应该是一样的,但是你的解决方案给出了一个不同的答案。

+0

上述链接中提到的结果与上述代码无关。我只想提到仅使用该链接的算法问题。 –

0

我所做的只是看你的代码,我注意到的第一件事是它看起来并不像你需要那个array数组,或者是第三个for循环。第二个for循环可以跟踪它随之生成的最低值min以及与最低值min相关联的索引,而不是像现在这样存储所有值并进行第二次运行。

编辑: 像其他人一样,我认为你的链接是你自己的结果。我不会发表一个答案,因为我认为你应该自己想出来。然而,在我看来,你对他们所说的“找到所有其他节点的距离总和”感到困惑,这可能是你开始总结整个阵列的原因。无论如何,它们传递给函数的数组并不是一组距离。这是现有连接的列表。如果数组中的第一个元素(位于0索引处的元素)为5,那么这意味着路由器0与路由器5有连接。因此,在我看来,您正在接近这一切。

0

两个相邻节点有一条边,其权重为1。