【问题标题】:PHP command line script with no output没有输出的 PHP 命令行脚本
【发布时间】:2016-10-06 13:53:48
【问题描述】:

我正在编写一个hackerrank 脚本,它适用于小输入,但对于数组的较大输入,它会停止输出,回声停止工作。没有错误,什么都没有。

$_fp = STDIN;
fscanf($_fp,"%d",$n);

$max = 0.0;
$max_cnt = 0.0;

$board = [];

for ($i = 0; $i < $n; $i++) {

    $points = explode(' ', fgets($_fp));

    $a = intval($points[0]);
    $b = intval($points[1]);

    runBoard2($a, $b);

}


function runBoard2 ($a, $b) {
    global $board, $max, $max_cnt;

    for($r = 0; $r < $a; $r++) {

        for($c = 0; $c < $b; $c++) {
            @$board[$r][$c]  += 1;
            $cellVal = $board[$r][$c];

            if ($cellVal > $max) {
                $max = $cellVal;
                $max_cnt = 1;
            } elseif ($cellVal === $max) {
                $max_cnt++;
            }
        }
    }
}
echo $max_cnt;

stdin.php:

2
1000000 1000000
1000000 1000000

命令行调用:

cat stdin.php | php rectangulargame.php 

适用于 stdin.php:

3
2 3
3 7
4 1

认为这与@$board[$r][$c] += 1; 这一行有关,就好像我取消@ 抑制以隐藏有关未定义偏移量的通知一样,它会显示这些消息,直到遇到内存不足错误。那么,有没有人建议我应该如何重构以避免这种情况?

进行了更多挖掘并找到了使用 mins of rows 和 cols 来计算的提示,而无需构建矩阵,在我用 PHP 环绕它之后,它的工作方式也很迷人而且速度也很快。

感谢所有花时间审阅的人,尤其是 cmets。

有人知道我如何编辑它以获得-1 票来改进吗?

【问题讨论】:

  • error_reporting(E_ALL); ini_set('display_errors', '1');
  • @AbraCadaver 谢谢,同样,处理了几秒钟,然后给我一个带有准备好的提示器的新行。
  • 您正在生成一个 1,000,000 x 1,000,000 的网格。那是您的数组中有 1,000,000,000,000 个条目,您想知道为什么内存不足?

标签: php command-line


【解决方案1】:

因此解决方案是重构以仅使用行和列分钟数和倍数来计算最终答案。

【讨论】:

    猜你喜欢
    • 2015-06-17
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2021-07-03
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多