【发布时间】: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