Codility任务TapEquilibrium正确率仅为33%

时间:2015-11-09 07:16:24

标签: c++ algorithm time-complexity

我尝试了Codility任务' TaskEquilibrium'并且根据Corectness标准仅获得33%。您可以在以下链接中查看我的C ++代码以及问题陈述:

https://codility.com/demo/results/trainingAPHQW7-UVM/

我在问题中的方法是首先计算数组元素的总和。然后我在每次迭代中找到差异(第一次迭代的方式不同)并更新最小绝对值。

我能够检查上述测试用例,但没有收到其他一些案例的正确答案。

请查看我的代码并告知算法错误在哪里。 提前谢谢。

1 个答案:

答案 0 :(得分:-2)

您逻辑中的一个重大缺陷是,您认为P至少为1,但有些情况P = 0会给您最小的差异。

e.g。对于[1,-1]的列表,您需要P=0,以便它为您[][1,-1]提供最小差异0

另一个问题是,当你遍历每个元素时,你还没有更新diffdiff总是sum of A[1..N] - A[0]),因此temp = diff + 2*A[p-1];不会在p > 2时给你有意义的结果。

你的循环看起来像(pesudo-code):

minDiff = sum;
diff = sum;
for each (int a in A) {
    diff -= (a * 2);
    if (abs(diff) < minDiff) {
        minDiff = abs(diff);
    }
}

最好只保留这样的差异,但如果它让你困惑,为什么不简单地保留两个var,例如sumOfFirstSection = 0; sumOfSecondSection = sum,并为A[]中的每个元素设置循环,然后执行sumOfFirstSection += A[i]; sumOfSecondSection -= A[i]并相应地推导出差异?