2017-08-07 61 views
0

請問爲什麼Codility告訴我下一個錯誤?Codility無效的結果類型,int期望值爲PHP

運行解決方案...編譯成功。

示例測試:[-1,3,-4,5,1,-6,2,1]輸出(stderr):無效 結果類型,int expected。運行時錯誤(測試程序意外終止 )

檢測到一些錯誤。

我的解決方案是在PHP上編寫的。

function solution($A) { 
    $N = count($A); 
    $Ps = array(); 
    foreach ($A as $KeyP => $P) { 
     $sum = 0; 
     if ($KeyP == 0) {     
      for ($x = 1; $x < $N; $x++) { 
       $sum += $A[$x]; 
      } 
      if ($sum == $P) { 
       $Ps[] = $KeyP; 
      } 
     } 
     else { 
      if (($KeyP+1) == $N) {     
       for ($z = 0; $z < $KeyP; $z++) : 
        $sum += $A[$z]; 
       endfor;  
       if (($sum >= 0) AND ($sum < $N)) { 
        $Ps[] = $KeyP; 
       } 
      }   
      else {  
       $sum1 = 0; 
       $sum2 = 0;   
       for ($z = 0; $z < $KeyP; $z++) : 
        $sum1 += $A[$z]; 
       endfor; 
       for ($y = ($KeyP+1); $y <= ($N-1); $y++) : 
        $sum2 += $A[$y]; 
       endfor;        
       if ($sum1 == $sum2) { 
        if ($sum1 < $N) { 
         $Ps[] = $KeyP; 
        } 
       } 
      } 
     } 
    } 
    return (count($Ps) <= 0) ? -1: $Ps; 
} 

給出的下一個陣列我的函數的輸出一直:

array(-1, 3, -4, 5, 1, -6, 2, 1); 

輸出繼電器

陣列([0] => 1 [1] => 3 [2] => 7)

這就像他們要求我的任務,但Codility顯示我所有這些錯誤。

演示任務是下面:

這是一個演示任務。

給出了一個由N個整數組成的零索引數組A.該陣列的平衡指數是任何整數P,使得0≤P< N 並且較低指數的元素之和等於較高指數的元素之和,即A [0] + A [1] + ... + A [P-1] = A [P + 1] + ... + A [N-2] + A [N-1]。假設零元素和等於0.如果P = 0或者P = N-1,則可能發生這種情況。

例如,考慮下面的數組A選自N = 8 元素:

A[0] => -1 
A[1] => 3 
A[2] => -4 
A[3] => 5 
A[4] => 1 
A[5] => -6 
A[6] => 2 
A[7] => 1 

P = 1是此數組的平衡指數,這是因爲:

A [0] = - 1 = A [2] + A [3] + A [4] + A [5] + A [6] + A [7] P = 3是該陣列的 平衡指數,因爲:

A [0] + A [1] + A [2] = -2 = A [4] + A [5] + A [6] + A [7] P = 7也是dex,因爲:

A [0] + A [1] + A [2] + A [3] + A [4] + A [5] + A [6] = 0並且沒有 元素指數大於7.

P = 8不是均衡指數,因爲它不符合 條件0≤P < N.

寫功能:

功能溶液($ A);

給定零指數陣列A由N個整數組成,返回其任何均衡指數 。如果不存在 均衡指數,函數應該返回-1。

例如,給定上面所示的陣列A,該功能可以返回1,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0或7,如上所述。

假設:

N是範圍[0..100,000]內的整數;陣列A 的每個元素是範圍[-2,147,483,648..2,147,483,647]內的整數。 複雜度:

預期的最壞情況下的時間複雜度是O(N);預期的最壞情況空間 複雜度爲O(N),超出輸入存儲空間(不包括輸入參數所需的存儲空間 )。輸入數組的元素可以是 已修改。

謝謝。

回答

1

爲Codility錯誤,請檢查這篇文章: https://stackoverflow.com/a/19804284/4369087

試試這個它是更具可讀性,在這種解決方案我正在通過引入兩個函數的代碼更易讀。 sumRight(),sumLeft()其中我使用內置的PHP函數。

array_sum():計算在陣列中的值的總和: 它返回值的總和爲一個整數或浮動;如果數組爲空,則爲0。

array_slice():提取數組的片段:array_slice()返回 從 偏移量和長度參數指定的數組中的元素序列。

所以我們每次循環中,我們計算從給定的位置$i總結的權利和陣列的左片陣列上:

<?php 

function solution(array $a) 
{ 
    $result = []; 

    $count = count($a); 
    for($i = 0; $i < $count; $i++) { 
     if(sumLeft($a, $i-1) === sumRight($a, $i+1)) { 
      $result[] = $i; 
     } 
    } 

    return count($result) ? $result : -1; 
} 

function sumRight(array $a, float $position): float 
{ 
    return array_sum(array_slice($a, $position));; 
} 

function sumLeft(array $a, float $position): float 
{ 
    return array_sum(array_slice($a, 0, $position + 1)); 
} 

echo "<pre>"; 
print_r(solution([-1, 3, -4, 5, 1, -6, 2, 1])); 

輸出:

Array 
(
    [0] => 1 
    [1] => 3 
    [2] => 7 
) 
+0

感謝答案,但是你的代碼比我的代碼更容易閱讀並不意味着Codility會批准它。實際上,解決方案和輸出是相同的,所以,兩個代碼都會給出相同的錯誤。 :(Greetings。 –

+0

不客氣@FernandoUrban,哪個php版本給出錯誤? – yoeunes

+0

Codility希望PHP7。 –

相關問題