Codibility任务TapBalancement的正确率只有33%

Codility task TapEquilibrium correctness only 33%

本文关键字:正确率 任务 TapBalancement Codibility      更新时间:2023-10-16

我尝试了Codibility任务"TaskBalancement",在核心性标准下只收到33%。你可以在下面的链接中查看我的C++代码和问题陈述:

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

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

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

请检查我的代码,并告知哪里是算法错误。提前谢谢。

逻辑中的一个大缺陷是,您假设P至少为1,但在某些情况下,P = 0会给您带来最小的差异。

例如,对于[1,-1]的列表,您需要P=0,以便它给您[][1,-1],后者给您最小差0

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

你的循环应该看起来像(pesudo代码):

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

这样只保留diff是个好主意,但如果它让你感到困惑,为什么不简单地保留两个var,例如sumOfFirstSection = 0; sumOfSecondSection = sum,并为A[]中的每个元素都有一个循环,然后执行sumOfFirstSection += A[i]; sumOfSecondSection -= A[i]并相应地导出差呢?