關於 LeetCode 498: Diagonal Traverse
我是照著這一篇 CPP 講解的思路寫的,
可是提交之後到了第 28 個測試 (一個剛好 10,000 個元素的陣列) 會因為超出執行限制時間而出錯:
源碼:
class Solution
{
/**
* @param Integer[][] $matrix
* @return Integer[]
*/
function findDiagonalOrder($matrix)
{
// assume $matrix is a M x N array
$m = sizeof($matrix);
$n = sizeof($matrix[0]);
$result = [];
for ($diagonal=0; $diagonal <= ($m + $n - 2); $diagonal++) {
// x + y = diagonal
for ($i = 0; $i <= $diagonal; $i++) {
$x = $i;
$y = $diagonal - $x;
// reverse the direction when it's even
if ($diagonal % 2 == 0) {
$tmp = $x;
$x = $y;
$y = $tmp;
}
if ($x >= $m || $y >= $n) {
continue;
}
// https://www.php.net/manual/en/function.array-push.php#83388
// array_push is slower than array_push
// array_push($result, $matrix[$x][$y]);
$result[] = $matrix[$x][$y];
}
}
return $result;
}
}
我有試著將比較慢的 array_push 轉成直接把值塞入陣列裡,可是一樣會出現 Time Limit Exceeded,
當然在本機上執行是會得到正確的結果 (不過速度依然偏慢).
本機上的執行環境為 docker: php7.3
不知道還有哪邊可以改進速度,請各位幫幫忙 m(_ _)m
推荐文章: