我試着對Codility進行演示測試,以找到數組的均衡指數(es)。我不確定測試是要找到數組的均衡指數還是什麼。我一派四周,發現下面的例子:陣列的均衡指數如何工作?
序列的平衡指數是這樣的索引的元素的在較低索引的總和等於在較高的索引的元素的總和。例如,在一個序列A:
A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0
3是一種平衡指數,這是因爲:
A[0] + A[1] + A[2] = A[4] + A[5] +A[6]
6也是平衡指數,這是因爲:
A[0] + A[1] + A[2] + A[3] + A[4] + A[5] = 0
基於這個信息我看到測試數組包含7個元素。它看起來像中間元素A[3]=2
被忽略。是因爲它在前3個元素和後3個元素之間?在這個例子中,6的均衡指數是如何得出的?
這裏是用來計算這種方法:
int equi(int arr[], int n) {
if (n==0) return -1;
long long sum = 0;
int i;
for(i=0;i<n;i++) sum+=(long long) arr[i];
long long sum_left = 0;
for(i=0;i<n;i++) {
long long sum_right = sum - sum_left - (long long) arr[i];
if (sum_left == sum_right) return i;
sum_left += (long long) arr[i];
}
return -1;
}
當我拿着Codility演示測試中,我與for
循環使用的方法(下)最初開始爲0,我收到一個「錯誤爲1, 5, 2, 1, 4, 0
和Codility測試用例答案」的消息一直在尋找的11
我修改這兩個for
環在我的方法,並開始在i = 1
第一環和第二環在i = 2
結果,直到它產生了11,Codility滿意的結果與...搭訕。我基本上只是調整了方法,直到Codility開心爲止(我開始射擊11,因爲Codility指出這是他們正在尋找的答案),但我不知道爲什麼Codility很高興或者我的調整的重要性 - 只是命中和錯過:
...
int[] B = new int[] { 1, 5, 2, 1, 4, 0 };
Console.WriteLine(solution3(B));
}
public int solution3(int[] A)
{
long rsum = 0;
for (int i = 1; i < A.Count(); i++)
rsum += A[i];
long lsum = A[0];
int min = (int)Math.Abs(lsum - rsum);
for (int i = 2; i < A.Count() - 1; i++)
{
lsum += A[i];
rsum -= A[i];
int diff = (int)Math.Abs(lsum - rsum);
if (diff >= min)
min = diff;
}
return min;
}
爲什麼這個調整(的命中和未命中)滿足Codility測試?什麼是均衡指數?它是如何到達的?注意:如果步驟A和步驟E之間有步驟(我將不得不在步驟之間直觀),步驟B,C和D是什麼?