Codility 任务 TapEquilibrium 正确性仅为 33%

Posted

技术标签:

【中文标题】Codility 任务 TapEquilibrium 正确性仅为 33%【英文标题】:Codility task TapEquilibrium correctness only 33% 【发布时间】:2015-11-09 07:16:23 【问题描述】:

我尝试了 Codility 任务“TaskEquilibrium”,但在正确性标准下仅获得 33%。您可以在以下链接中查看我的 C++ 代码以及问题陈述:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

例如对于[1,-1] 的列表,您需要P=0,以便它为您提供[][1,-1],这将为您提供最小差异0

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

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

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]并相应地得出差异?

【讨论】:

可能是因为没有要回答的主题问题。如果您真的想回答这个问题,您还可以花一些时间使问题与主题相关,例如发布 MCVE,并指定一个明确的问题。 好吧,那么我认为是接受否决票的问题,而不是答案,不是吗?

以上是关于Codility 任务 TapEquilibrium 正确性仅为 33%的主要内容,如果未能解决你的问题,请参考以下文章

Codility 任务 TapEquilibrium 正确性仅为 33%

Codility - CountDiv JavaScript解决方案

Codility峰的O(N * log(log(N)))算法?

Python Codility Frog River 一次复杂度

java codility Max-Counters

java codility 训练基因组范围查询