關於 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