解决Codility算法

时间:2011-10-31 14:14:09

标签: java algorithm

我在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;
    }

4 个答案:

答案 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.