2017-08-07 55 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。 –

相关问题